1

我正在学习使用 SignalR,到目前为止我在这方面取得了成功。我可以实现集线器,我可以实现业务逻辑,我可以从我想要的服务器调用客户端函数,我可以从客户端调用服务器端方法,这东西很棒。令我困惑的是理论。

事实上,我从这个视频中收集了信息。SignalR 正在使用WebSockets,它通过单个TCP连接提供全双工通道。如果没有可用的 WebSocket,则回退协议将为EventSource。如果不可用,则将使用 Forever Frame。如果不可用,则将使用长轮询。对我来说很奇怪的是,一个非常老套的解决方案,比如永远框架比旧的约定更受欢迎,我对 SignalR 决定将永远框架作为第三个选项并将轮询作为第四个选项背后的基本原理感兴趣。

我试图找出这个问题的答案,我发现据传,与永远帧相比,长轮询的最大延迟时间是 3 倍。这是事实吗?如果是,是所有浏览器的事实,还是部分浏览器的事实?

4

1 回答 1

1

foreverFrame 的工作方式有点像 serverSentEvents - 有一个长时间运行的 http 请求,服务器永远不会终止,而是用来将数据推送到客户端。longPolling 的工作方式不同 - 每次有数据供客户端读取(或超时到期)时,服务器都会关闭一个 poll http 请求。如果客户端想要读取更多数据,它需要打开一个新的 http 请求,一旦客户端有任何数据,服务器就会再次关闭该请求。换句话说,在foreverFrame的情况下,服务器使用已经建立的通道将数据推送到客户端,而在longPolling的情况下,客户端不断创建http请求以从服务器获取数据。

于 2016-09-16T02:27:20.300 回答