【发布时间】:2011-11-16 14:31:11
【问题描述】:
我有几个 SignalR 基本演示在本地工作(聊天等),我知道推送到服务器然后将其广播到所有连接的客户端。
我的问题是如何利用 SignalR 将数据“流式传输”到客户端。例如,在 NodeJS/Socket.IO 中看到使用 Twitter 流 API 的示例。
是否有任何 SignalR 流式传输示例?这可能如何工作?
【问题讨论】:
我有几个 SignalR 基本演示在本地工作(聊天等),我知道推送到服务器然后将其广播到所有连接的客户端。
我的问题是如何利用 SignalR 将数据“流式传输”到客户端。例如,在 NodeJS/Socket.IO 中看到使用 Twitter 流 API 的示例。
是否有任何 SignalR 流式传输示例?这可能如何工作?
【问题讨论】:
查看 SignalR.Samples 项目中的示例。那里有一个流样本。
服务器端连接:
namespace SignalR.Samples.Streaming
{
public class Streaming : PersistentConnection
{
}
}
生成流的代码
ThreadPool.QueueUserWorkItem(_ =>
{
var connection = Connection.GetConnection<Streaming.Streaming>();
while (true)
{
connection.Broadcast(DateTime.Now.ToString());
Thread.Sleep(2000);
}
});
客户端代码
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
<script src="../Scripts/jquery-1.6.2.min.js" type="text/javascript"></script>
<script src="../Scripts/jquery.signalR.js" type="text/javascript"></script>
<script type="text/javascript">
$(function () {
var connection = $.connection('Streaming.ashx');
connection.received(function (data) {
$('#messages').append('<li>' + data + '</li>');
});
connection.start();
});
</script>
</head>
<body>
<ul id="messages">
</ul>
</body>
</html>
【讨论】:
为什么不直接使用 SignalR 告诉客户端以老式方式通过 HTTP 开始下载?还是您在 .NET 方面以不同的方式使用 Stream?
如果您只是指广播外部事件,没有什么可以说明其中一个客户端不能是发送有趣数据事件以进行中继的其他服务。
【讨论】: