SignalR如何在内部工作?

use*_*567 157 signalr

任何人都可以让我知道SignalR如何以高水平的方式在内部工作?

我猜它正在使用刷新数据,Response.Flush并且在客户端它以一定的间隔发送Ajax请求.这是对的吗?

dav*_*owl 237

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

SignalR有一些内置传输:

  1. 的WebSockets
  2. 服务器已发送事件
  3. 永远的框架
  4. 长期民意调查

SignalR尝试选择服务器和客户端支持的"最佳"连接(您也可以强制它使用特定的传输).

这是高水平.如果要查看每个传输的实现方式,可以查看源代码.

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

如果您询问长轮询运输如何运作:

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

希望这能回答你的大部分问题.

  • 你能告诉我一次能够支持多少个连接? (3认同)
  • 正如已经提到的,涨停是在服务器层面。Damnien Edwards(SignalR 的共同创建者)从单个 10GB 服务器获得了 150,000 个连接:https://twitter.com/DamianEdwards/status/486642486350061568 (2认同)

shi*_*vam 9

@davidfowl 已经回答了主要部分。但是,要提供有关传输行为差异的更多详细信息,特别是 WebSocket 和其他传输之间的差异;以下是一些要点。

  • WebSocket 是唯一一种在客户端和服务器之间建立真正持久的双向连接的传输方式。但是,WebSocket 仅支持 IIS 8 或更高版本,以及最新版本的 Internet Explorer、Google Chrome 和 Mozilla Firefox。
  • 虽然 Server Sent Events、Forever Frame 和 Long polling,这三者都遵循单向通信,并且被大多数浏览器支持。