【问题标题】:How SignalR broadcast the messages?SignalR 如何广播消息?
【发布时间】:2013-07-13 15:19:28
【问题描述】:

已开始使用 SignalR。想澄清一些关于 SignalR 如何实现广播的疑问,基本上服务器如何能够发起通信?

1> 在正常情况下,每当我们请求一个 .aspx 页面时,服务器都会渲染页面并将响应返回给客户端,然后事情就完成了

但如果 ASP.net 站点上提供 Ticker 演示,SignalR 如何能够在后台/异步中持续执行。

我用谷歌搜索了一下,发现 IRegisteredObject 是需要持续执行的对象需要向 HostingEnvironment 注册的方式之一,但为此,该类必须实现 IRegisteredObject 接口,但在代码演示的情况下,没有类实现了 IRegisteredObject 接口。

我是在这里发信息还是 SignalR 使用了完全不同的技术?

【问题讨论】:

    标签: signalr broadcasting


    【解决方案1】:

    SignalR 使用 4 种传输方式来处理来自服务器的数据。一次只使用一个传输,但 SignalR 有 4 个来确保服务器/客户端在各种设备/浏览器上的通信。以下是传输和简短的技术说明:

    1. 长轮询,为了接收数据,它使用 ajax 请求,其响应在服务器上有可用数据之前不会发布,一旦服务器返回有关保留响应的数据,客户端然后创建另一个请求并等待下一批数据的。为了发送数据,它会创建第二个 ajax 请求。
    2. Forever Frame,使用 iframe,服务器通过 iframe 下推 javascript 文本,然后在 iframe 中执行,然后 iframe 将执行传播到父页面,然后处理数据。 SignalR 使用 ajax 请求发送数据。
    3. 服务器发送事件,使用 EventSource 对象。除了 IE,几乎所有东西都支持。 EventSource 对象打开了一个单向管道,服务器可以通过该管道泵送数据,从而允许客户端实时接收数据。 SignalR 使用 ajax 请求发送数据。
    4. Web Sockets,使用内置的浏览器 WebSocket 对象打开一个单一的双向通道,通过该通道可以接收和发送数据。

    这是每个 SignalR 传输的精髓,您可以观看一个小时的演示,其中 David Fowler 和 Damian Edwards 创建了 SignalR here 的 Lite 版本。它从本质上强调了 SignalR 是如何在幕后工作的。

    【讨论】:

    • 感谢您的回复,我知道 SignalR 使用的差异传输。我的查询是 SignalR 如何在服务器上连续运行,基本上就像一个时间表。 SignalR 是否像我在上面的帖子中解释的 IRegisteredObject 一样耗尽了 AppDomain。在这种情况下,不需要从客户那里获得激活处理(更新股票价格)的请求。我看到了 David Fowler Lite 版本,但更多的是关于集线器和客户端如何通信,我的疑问是 SignalR 如何在没有客户端请求的情况下持续处理?