在上一篇 SignalR新手系列教程详解(一)- SignalR介绍中初步了解了SignalR是什么,今天我们继续深入了解SignalR。
SignalR传输方式和平台设备要求
SignalR 是一般比其他客户端对服务器实时通信传输更抽象的一个概念。SignalR 开始连接是一个HTTP,如果有可能它可以被上升到一个WebSocket 连接。WebSocket 是 SignalR 最理想的传输方式,因为WebSocket 对服务器的内存利用率是最高的,同时延时性也是最低的,并且还有其他优越的性能(比如客户端和服务端的全双工通讯)。虽然是这样,但是这也需要严格的设备支持,服务器必须是Windows Server 2012 或者 Windows 8,.NET Framework 4.5。如果这些条件不满足,你还是老老实实使用其他传输方式来建立连接吧。
HTML5 传输
这种传输方式当然是需要对HTML5兼容支持。如果客户端不支持HTML5 标准,那么你可以使用其他方式。
- WebSocket: (前提是服务器和客户端都可以支持WebSocket )。WebSocket 是唯一的能够支持服务器和客户端建立真正持久的双向连接的传输方式,但是就是WebSocket要求的条件比较苛刻。WebSocket真正能够支持只是在最新的IE 浏览器、Chrome、Firefox和一些其他的浏览器比如Opera 和 Safari。
- 服务端发送事件 :就是我们常说的EventSource (除了IE的其他浏览器都支持支持服务器发送事件)。
Comet 传输
下面的传输方式都是建立在Comet Web应用模型上。这种传输方式会在浏览器或者其他客户端保持一个长连接的HTTP请求,服务器可以利用这个请求将数据推送到客户端,而不用等客户端单独去请求数据。
- Forever Frame:(只有IE浏览器支持)Forever Frame 会创建一个隐藏的IFrame ,这个IFrame 会向服务器发起一个端点请求,但是这个请求不会结束。服务器会不停的发送脚本到客户端马上执行,提供一个从服务器端到客户端的单向实时连接。服务端到客户端和客户端到服务端分别是两个不同的连接,就像一个标准的HTTP请求,一旦有数据需要发送就会创建一个新的连接。
- Ajax 长轮询:长轮询不会创建一个持久的连接,它是会保持一个客户端与服务器的连接,直到服务器做出应答就会立即关闭,然后创建一个新的连接。当连接重置的时候这会导致一些延迟。
更多关于传输和支持配置的信息可以访问支持平台。
SignalR 传输方式的选择分析
下面的列表展示了怎样去选择哪种传输方式:
- 如果浏览器是IE 8 或者更早版本,使用长轮询方式。
- 如果是JSONP请求格式,使用长轮询方式(因为参数jsonp设置为true的时候,请求就已经开始了)。
如果是跨域请求,如果满足下面的条件可以使用 WebSocket
- 客户端支持跨域。
- 客户端支持WebSocket。
- 服务端支持WebSocket。
如果上面任何一个不满足还是只能使用长轮询方式。
- 如果不是跨域,并且客户端和服务器端都支持WebSocket,那么就可以使用WebSocket。
- 如果客户端版本过低或者服务器不支持WebSocket,那么使用服务端发送事件(EventSource)方式。
- 如果服务端发送事件(EventSource)方式都不支持,就尝试使用Forever Frame。
- 如果不支持Forever Frame,就使用长轮询方式。
以上就是SignalR传输方式和平台设备要求以及如果选择正确的传输方式的整个内容。