Websockets和SSE(服务器发送事件的疑问

来源:互联网 发布:二维码生成算法 c语言 编辑:程序博客网 时间:2024/05/22 10:27
Websockets和SSE(服务器发送事件)都能够将数据推送到浏览器,但它们不是竞争技术。


Websockets连接可以将数据发送到浏览器并从浏览器接收数据。可以使用websockets的应用程序的一个很好的例子是聊天应用程序。


SSE连接只能将数据推送到浏览器。在线股票报价或更新时间表或饲料的抽搐是可以从上证所受益的应用程序的好例子。


在实践中,由于可以使用Websockets完成所有可以完成的任务,所以Websockets得到了更多的关注和关注,更多浏览器支持Websockets而不是SSE。


然而,对于某些类型的应用程序来说,这可能是过度的,后端可以使用诸如SSE的协议来实现。


此外,SSE可以被填充到旧版浏览器中,该浏览器本身不支持JavaScript。在Modernizr github页面上可以找到SSE polyfills的一些实现。


陷阱:


SSE受限于最大数量的开放式连接,当打开各种标签时,特别令人痛苦,因为限制是每个浏览器,并设置为非常低的数字(6)。 Chrome和Firefox中的问题已被标记为“不会修复”
只有WS可以传输二进制数据和UTF-8,SSE仅限于UTF-8。 (感谢Chado Nihi)。
HTML5Rocks有一些关于SSE的信息。从那个页面:


服务器发送事件与WebSockets


为什么要通过WebSockets选择服务器发送的事件?好问题。


SSEs一直存在的一个原因是因为像WebSockets这样的后期API可以提供更丰富的协议来执行双向全双工通信。拥有双向频道对于像游戏,消息应用程序以及在两个方向上需要近实时更新的情况更有吸引力。但是,在某些情况下,不需要从客户端发送数据。您只需要从某些服务器操作进行更新。几个例子将是朋友的状态更新,股票行情,新闻Feed或其他自动数据推送机制(例如更新客户端Web SQL数据库或IndexedDB对象存储)。如果您需要将数据发送到服务器,则XMLHttpRequest始终是一个朋友。


SSE通过传统HTTP发送。这意味着它们不需要特殊的协议或服务器实现来实现。另一方面,WebSockets需要全双工连接和新的Web Socket服务器来处理协议。此外,服务器发送事件具有WebSockets设计缺乏的各种功能,如自动重新连接,事件ID以及发送任意事件的功能。
TLDR总结:


上交所对Websockets的优势:


通过简单的HTTP而不是自定义协议传输
可以多重填充javascript以将“上传”SSE传递给不支持的浏览器。
内置支持重新连接和事件ID
更简单的协议
Websockets与SSE的优势:


实时,双向沟通。
更多浏览器的本地支持
上交所理想用例:


股票流媒体
twitter饲料更新
通知浏览器
上证人:


没有二进制支持
最大连接限制
原创粉丝点击