谁能让我知道SignalR在高级别的内部工作方式?

我猜它正在使用 Response.Flush 在客户端,它是在某些时间间隔发送AJAX请求。这是对的吗?

有帮助吗?

解决方案

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

Signalr有一些内置的运输工具:

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

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

那是高水平。如果您想查看每次运输的实施方式,可以查看 源代码.

每次运输也都有客户代码:https://github.com/signalr/signalr/tree/master/src/microsoft.aspnet.signalr.client.js

如果您询问长期投票运输方式特别有效:

它向服务器发送AJAX请求,该请求异步等待信号以响应。当有信号或请求时间时,它将从服务器返回并发送另一个请求,并且该过程将继续。 (我遗漏了一些有关其如何跟踪其所见所闻的详细信息,因此不会错过消息)

希望这回答您的大多数问题。

其他提示

@DavidFowl已经回答了主要部分。但是,为了提供有关运输行为差异的更多细节,特别是在Websocket和其他运输工具之间;以下是一些要点。

  • WebSocket是唯一建立客户端和服务器之间真正持久双向连接的运输。但是,Websocket仅由IIS 8或更高版本以及Internet Explorer,Google Chrome和Mozilla Firefox的最新版本提供支持。
  • 当服务器发送事件,永远的框架和长时间的投票时,这三个都遵循单向通信,并得到大多数浏览器的支持。
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top