SignalR如何在内部工作?

任何人都可以让我知道,SignalR如何在高层次内部工作?

我猜测它刷新数据使用Response.Flush和在客户端它是发送一定的时间间隔Ajax请求。 这是对的吗?

不,SignalR是一个连接的抽象。 它通过该连接为您提供了两种编程模型(集线器和持久连接)。 SignalR有一个传输的概念,每个传输决定如何发送/接收数据,以及如何连接和断开连接。

SignalR有一些内置的传输:

  1. 的WebSockets
  2. 服务器发送的事件
  3. 永远的框架
  4. 长期投票

SignalR尝试select服务器和客户端支持的“最佳”连接(也可以强制它使用特定的传输)。

这是很高的水平。 如果你想看看每个传输是如何实现的,你可以看看源代码 。

还有每个传输的客户端代码: https : //github.com/SignalR/SignalR/tree/master/src/Microsoft.AspNet.SignalR.Client.JS

如果你问的是长长的投票运输如何运作:

它向asynchronous等待的服务器发送一个ajax请求,以响应一个信号。 当有信号或请求超时时,它从服务器返回,并发送另一个请求,并继续进行。 (我留下了一些细节,关于客户端如何跟踪它看到的内容,所以它不会错过消息)

希望能回答你的问题。

@davidfowl已经回答了主要部分。 但是,要提供一些有关运输行为差异的更多细节,特别是WebSocket与其他运输之间的差异。 下面是一些要点。

  • WebSocket是在客户机和服务器之间build立一个真正的永久性双向连接的唯一传输方式。 但是,WebSocket仅支持IIS 8或更高版本,以及最新版本的Internet Explorer,Google Chrome和Mozilla Firefox。
  • 当服务器发送事件,Forever Frame和长轮询时,三者都进行单向通信,并且受到大多数浏览器的支持。