最近我发现Server-Sent事件是WebSockets的一个更简单的替代方法,用于从服务器进行推送 . 大多数比较它们的地方(如here,here和here)都表示,如果您不需要客户端和服务器之间的全双工通信,那么WebSockets就太过分了,SSE就足够了 .
我的问题是当你需要双向通信(例如聊天),使用常规的ajax请求从客户端发送消息和服务器流接收它们时,使用SSE的缺点是什么?考虑到我必须在服务器端做很少甚至没有配置来使用SSE,它似乎是一个更吸引人的选择 .
SSE Advantages 在WebSockets上:
无需更改特殊Web服务器或Web代理 .
定义自定义事件(否则,客户端API基本相同)
更容易整合现有的身份验证机制(OAuth,OpenID等)
SSE Disadvantages 与WebSockets相比:
单向通信通道(服务器到客户端) . 客户端到服务器需要单独的通道 .
浏览器支持更受限制(没有本机IE支持,而IE 10支持WebSockets):WebSockets,SSE
依靠客户端来验证来源(可能比WebSockets更容易受到XSS攻击)
对二进制类型没有本机支持(WebSockets支持使用ArrayBuffers和Blob的原始帧) .
即使SSE endpoints 没有提供静态Web内容,也需要一个完整的Web服务器(独立的WebSocket服务器可以相当简单)
使用AJAX进行双向通信的SSE与使用WebSocket连接相比,具有更高的往返延迟和更高的客户端 - >服务器带宽 . 这是由于每个客户端 - >服务器AJAX请求的连接设置开销 . 此外,服务器 - >客户端延迟可能会出现SSE峰值,因为在许多配置中,长期连接最终将被关闭(通常每30秒一次)并需要重新打开,从而导致服务器 - >客户端延迟暂时出现峰值 .
参考文献:
http://www.html5rocks.com/en/tutorials/eventsource/basics/
https://developer.mozilla.org/en-US/docs/Server-sent_events
https://developer.mozilla.org/en-US/docs/Server-sent_events/Using_server-sent_events
http://dev.w3.org/html5/eventsource/
与小型WebSocket消息相比,Ajax请求是巨大的 . 标准HTTP请求(Ajax)包括许多标头,包括每个请求的cookie,而WebSocket消息只是几个字节 .
HTTP(Ajax)请求的好处是,如果这对您的问题有益,它们更容易缓存 .
2 回答
SSE Advantages 在WebSockets上:
无需更改特殊Web服务器或Web代理 .
定义自定义事件(否则,客户端API基本相同)
更容易整合现有的身份验证机制(OAuth,OpenID等)
SSE Disadvantages 与WebSockets相比:
单向通信通道(服务器到客户端) . 客户端到服务器需要单独的通道 .
浏览器支持更受限制(没有本机IE支持,而IE 10支持WebSockets):WebSockets,SSE
依靠客户端来验证来源(可能比WebSockets更容易受到XSS攻击)
对二进制类型没有本机支持(WebSockets支持使用ArrayBuffers和Blob的原始帧) .
即使SSE endpoints 没有提供静态Web内容,也需要一个完整的Web服务器(独立的WebSocket服务器可以相当简单)
使用AJAX进行双向通信的SSE与使用WebSocket连接相比,具有更高的往返延迟和更高的客户端 - >服务器带宽 . 这是由于每个客户端 - >服务器AJAX请求的连接设置开销 . 此外,服务器 - >客户端延迟可能会出现SSE峰值,因为在许多配置中,长期连接最终将被关闭(通常每30秒一次)并需要重新打开,从而导致服务器 - >客户端延迟暂时出现峰值 .
参考文献:
http://www.html5rocks.com/en/tutorials/eventsource/basics/
https://developer.mozilla.org/en-US/docs/Server-sent_events
https://developer.mozilla.org/en-US/docs/Server-sent_events/Using_server-sent_events
http://dev.w3.org/html5/eventsource/
与小型WebSocket消息相比,Ajax请求是巨大的 . 标准HTTP请求(Ajax)包括许多标头,包括每个请求的cookie,而WebSocket消息只是几个字节 .
HTTP(Ajax)请求的好处是,如果这对您的问题有益,它们更容易缓存 .