首页 文章

使用Server-Sent事件进行双向客户端 - 服务器通信(而不是WebSockets)的缺点

提问于
浏览
12

最近我发现Server-Sent事件是WebSockets的一个更简单的替代方法,用于从服务器进行推送 . 大多数比较它们的地方(如hereherehere)都表示,如果您不需要客户端和服务器之间的全双工通信,那么WebSockets就太过分了,SSE就足够了 .

我的问题是当你需要双向通信(例如聊天),使用常规的ajax请求从客户端发送消息和服务器流接收它们时,使用SSE的缺点是什么?考虑到我必须在服务器端做很少甚至没有配置来使用SSE,它似乎是一个更吸引人的选择 .

2 回答

  • 2

    SSE Advantages 在WebSockets上:

    • 无需更改特殊Web服务器或Web代理 .

    • 定义自定义事件(否则,客户端API基本相同)

    • 更容易整合现有的身份验证机制(OAuth,OpenID等)

    SSE Disadvantages 与WebSockets相比:

    • 单向通信通道(服务器到客户端) . 客户端到服务器需要单独的通道 .

    • 浏览器支持更受限制(没有本机IE支持,而IE 10支持WebSockets):WebSocketsSSE

    • 依靠客户端来验证来源(可能比WebSockets更容易受到XSS攻击)

    • 对二进制类型没有本机支持(WebSockets支持使用ArrayBuffers和Blob的原始帧) .

    • 即使SSE endpoints 没有提供静态Web内容,也需要一个完整的Web服务器(独立的WebSocket服务器可以相当简单)

    • 使用AJAX进行双向通信的SSE与使用WebSocket连接相比,具有更高的往返延迟和更高的客户端 - >服务器带宽 . 这是由于每个客户端 - >服务器AJAX请求的连接设置开销 . 此外,服务器 - >客户端延迟可能会出现SSE峰值,因为在许多配置中,长期连接最终将被关闭(通常每30秒一次)并需要重新打开,从而导致服务器 - >客户端延迟暂时出现峰值 .

    参考文献:

  • 17

    与小型WebSocket消息相比,Ajax请求是巨大的 . 标准HTTP请求(Ajax)包括许多标头,包括每个请求的cookie,而WebSocket消息只是几个字节 .

    HTTP(Ajax)请求的好处是,如果这对您的问题有益,它们更容易缓存 .

相关问题