SignalR如何决定使用哪种传输方法?

时间:2013-06-07 11:59:47

标签: signalr signalr.client

SignalR是用于实时连接的传输的抽象。我仍然想知道它究竟是如何确定应该使用哪种传输方法,具体取决于各种因素。 我使用可用的文档做了一些研究,并查看了源代码,并想出了它是如何工作的。

所以我的实际问题是,下面的流程图是正确的还是我错过了什么?

Flowchart of SignalR's assumed transport negotiating

更新

感谢您的投入!这是根据您的修复程序的更新版本。但我仍然不确定一件事:如果没有明确检查IE9 +是否被使用,如果它不是IE并且不支持SSE,是什么触发从ForeverFrame到LP的回退?

enter image description here

1 个答案:

答案 0 :(得分:8)

首先关闭令人敬畏的图表。

非常接近!以下是一些修复:

Configured JSONP
 Yes -> Use LP  
 No -> IsCrossDomain  
       Yes -> CORS Support?  
              No -> JSONP = true  
                    -> Use LP  
              Yes -> Server Supports WebSockets  
                     Yes -> Client Supports WebSockets  
                            Yes -> Use WebSockets  
                            No -> Use LP  
                     No -> Use LP  
              No -> Use LP  

另一个细节:ForeverFrame总是在SSE之前尝试(即使在Chrome中),但在传输本身内它检查是否存在EventSource(SSE的基础方法),如果它存在则永远帧无法启动(所以它可以回归到SSE)。因此,IE9 +绝不是直接检查。

实施我的修补程序后,您的图表就会准确无误。