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

时间:2014-05-28 14:25:50

标签: javascript websocket server-sent-events

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

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

3 个答案:

答案 0 :(得分:18)

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

  • 尝试通过WebSocket连接获取内容很糟糕 设计决策因为WebSockets是嵌套的不同协议 在HTTP连接中,它不能利用缓存(两者都没有 浏览器和CDN)。
  • 一些较旧的代理不会传递Websocket连接,除非它隐藏在服务器的安全连接中 已发送的事件仍然是HTTP连接,并且不会受到影响 这个。
  • 原生Android中不支持WebSockets和SSE 浏览器直到4.4(当他们切换到使用Chrome时) - 因此如果 你正在考虑使用混合移动应用程序,你需要这样的后备 作为SocketIO,在撰写本文时,4.4仅占市场的20% 混合应用程序使用原生Android浏览器。
  • WebSockets是 移动设备最节能的电池协议,因为所有其他 选项需要许多HTTP连接,并且重复 协商将负担cpu和耗尽的标头 电池。

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

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

答案 1 :(得分:1)

  • 服务器发送事件:仅用于发送文本消息的持久连接服务器2-客户端,并且在所有主要浏览器中实现,但是Internet Explorer。如果连接丢失,它可以重新连接。 http://caniuse.com/eventsource

  • WebSokets:能够传输UTF8文本和二进制数据的全双工持久连接。 http://caniuse.com/websockets

WebSocket更好,未来。

答案 2 :(得分:0)

据我所知,SSE更简单,更容易实现,而WebSockets提供双向数据传输,但是您需要了解自己的协议/ API以利用它们。老实说,我从未真正对SSE感到困扰,Socket.IO我所需要的只是实时网络应用程序通信,并且构建为跨浏览器。

如果您只是希望他能够看到通知,那么SSE应该没问题。如果您希望他能够从同一页面回复您的朋友请求,请让服务器向您发送他已接受的通知,您可能希望使用WebSockets实现。