Socket.IO

什么是Socket.IO

Socket.IO是一个库,可用于在浏览器和服务器之间进行实时,双向和基于事件的通信。它包括:

  • 使Node.js服务器:来源API
  • 为浏览器(可从Node.js的也运行)一个JavaScript客户端库:来源API

 

 

还有一些其他语言的客户端实现,由社区维护:

这是如何运作的?

如果可能,客户端将尝试建立WebSocket连接,如果没有,客户端将使用HTTP长轮询。

WebSocket是一种通信协议,可在服务器和浏览器之间提供全双工和低延迟通道。这里可以找到更多信息

因此,在最佳情况下,应提供:

  • 浏览器支持WebSocket(2020年所有浏览器的97%
  • 没有任何元素(代理,防火墙等)阻止客户端和服务器之间的WebSocket连接

您可以将Socket.IO客户端视为WebSocket API的“轻量级”包装。

特征

其主要特点是:

可靠性

即使存在以下情况,也会建立连接:

  • 代理和负载平衡器。
  • 个人防火墙和防病毒软件。

为此,它依赖于Engine.IO,该引擎首先建立长轮询连接,然后尝试升级到在侧面进行“测试”的更好传输,例如WebSocket。请参阅“目标”部分以获取更多信息。

自动重新连接支持

除非另有指示,否则断开连接的客户端将尝试永久重新连接,直到服务器再次可用为止。请在此处查看可用的重新连接选项

断线检测

心跳机制在Engine.IO级别上实现,使服务器和客户端都可以知道另一方何时不再响应。

通过在服务器和客户端上设置计时器,并在连接握手期间共享超时值(pingInterval和pingTimeout参数),可以实现该功能。这些计时器要求将任何后续客户端调用都定向到同一服务器,因此使用多个节点时需要执行粘性会话。

二进制支持

可以发出任何可序列化的数据结构,包括:

多路传输支持

为了在应用程序内创建关注点分离(例如,每个模块或基于权限),Socket.IO允许您创建多个Namespaces,它们将充当单独的通信通道,但将共享相同的基础连接。

详细可以看连接:https://socket.io/docs/

posted @ 2020-10-21 10:14  peifengyang  阅读(495)  评论(0编辑  收藏  举报