有谁能让我知道SignalR如何以高水平的方式在内部工作?
我猜它正在使用Response.Flush
刷新数据,并且在客户端它以一定的间隔发送Ajax请求。这是对的吗?
答案 0 :(得分:231)
不,SignalR是连接的抽象。它为您提供了两种编程模型(集线器和持久连接)。 SignalR具有传输概念,每个传输决定数据的发送/接收方式以及连接和断开连接的方式。
SignalR有一些内置的传输方式:
SignalR尝试选择服务器和客户端支持的“最佳”连接(您也可以强制它使用特定的传输)。
这是高水平。如果您想了解每种传输的实现方式,可以查看source code。
每个传输还有客户端代码: https://github.com/SignalR/SignalR/tree/master/src/Microsoft.AspNet.SignalR.Client.JS
如果您询问长轮询运输如何运作:
它向服务器发送ajax请求,该服务器异步等待信号响应。当有信号或请求超时时,它从服务器返回并发送另一个请求并继续该过程。 (我留下了一些关于客户如何跟踪它所看到的内容以及它不会错过消息的细节)
希望这能回答你的大部分问题。
答案 1 :(得分:2)
@davidfowl已经回答了主要部分。但是,要提供有关传输行为差异的更多细节,特别是WebSocket和其他传输之间的差异;以下是一些观点。