服务器发送事件vs Web套接字?

use*_*234 11 javascript websocket server-sent-events

我正在开发一个网络应用程序,用户可以通过从智能手机到桌面的多个平台访问这些应用程序,有时需要在两个客户端之间进行通信,例如,如果我希望我的朋友加入我的网络,我会向他发送朋友请求但是我希望我的朋友能够看到该请求而无需刷新页面.

在这种情况下,这将是一个更好的选择?此外,我希望这个可以在尽可能多的平台和浏览器上工作,这些平台和浏览器有更多的浏览器支持?有更好的选择吗?

Jay*_*ond 18

做出这个选择时要记住一些事情.

  • 尝试通过WebSocket连接获取内容是一个糟糕的设计决策,因为WebSockets是嵌套在HTTP连接中的不同协议,它不能利用缓存(浏览器和CDN).
  • 某些较旧的代理不会传递Websocket连接,除非它隐藏在安全连接中,而Server Sent Events仍然是HTTP连接,并且不会受此影响.
  • 在4.4之前(当他们切换到使用Chrome时)本机Android浏览器中既不支持WebSockets也不支持SSE - 因此,如果您正在考虑使用混合移动应用程序,那么您将需要一个诸如SocketIO之类的后备,因为在撰写本文时,4.4是只有20%的市场和混合应用程序使用原生Android浏览器.
  • WebSockets是移动设备上最节省电池的协议,因为所有其他选项都需要许多HTTP连接,并且重复协商标头会增加CPU负担并耗尽电池电量.

另一种选择可能是通知.所有移动设备现在都支持可以定位到应用程序的通知,并且还有许多浏览器.在所有情况下,从客户端到消息中心(Apple,Google,Microsoft等)的连接已经存在,并且所有通知都通过此通道发送.

以下是WebSockets与SSE的完整概述:http: //www.html5rocks.com/en/tutorials/eventsource/basics/

  • “所有其他选项都需要许多HTTP连接”。上证所只需要一个吗? (2认同)