Socket.IO
什么是Socket.IO
Socket.IO是一个库,可用于在浏览器和服务器之间进行实时,双向和基于事件的通信。它包括:
还有一些其他语言的客户端实现,由社区维护:
- Java:https://github.com/socketio/socket.io-client-java
- C ++:https://github.com/socketio/socket.io-client-cpp
- 斯威夫特:https : //github.com/socketio/socket.io-client-swift
- 飞镖:https://github.com/rikulo/socket.io-client-dart
- Python:https://github.com/miguelgrinberg/python-socketio
- .Net:https://github.com/Quobject/SocketIoClientDotNet
这是如何运作的?
如果可能,客户端将尝试建立WebSocket连接,如果没有,客户端将使用HTTP长轮询。
WebSocket是一种通信协议,可在服务器和浏览器之间提供全双工和低延迟通道。在这里可以找到更多信息。
因此,在最佳情况下,应提供:
- 浏览器支持WebSocket(2020年所有浏览器的97%)
- 没有任何元素(代理,防火墙等)阻止客户端和服务器之间的WebSocket连接
您可以将Socket.IO客户端视为WebSocket API的“轻量级”包装。
特征
其主要特点是:
可靠性
即使存在以下情况,也会建立连接:
- 代理和负载平衡器。
- 个人防火墙和防病毒软件。
为此,它依赖于Engine.IO,该引擎首先建立长轮询连接,然后尝试升级到在侧面进行“测试”的更好传输,例如WebSocket。请参阅“目标”部分以获取更多信息。
自动重新连接支持
除非另有指示,否则断开连接的客户端将尝试永久重新连接,直到服务器再次可用为止。请在此处查看可用的重新连接选项。
断线检测
心跳机制在Engine.IO级别上实现,使服务器和客户端都可以知道另一方何时不再响应。
通过在服务器和客户端上设置计时器,并在连接握手期间共享超时值(pingInterval和pingTimeout参数),可以实现该功能。这些计时器要求将任何后续客户端调用都定向到同一服务器,因此使用多个节点时需要执行粘性会话。
二进制支持
可以发出任何可序列化的数据结构,包括:
- 浏览器中的ArrayBuffer和Blob
- Node.js中的ArrayBuffer和Buffer
多路传输支持
为了在应用程序内创建关注点分离(例如,每个模块或基于权限),Socket.IO允许您创建多个Namespaces,它们将充当单独的通信通道,但将共享相同的基础连接。
详细可以看连接:https://socket.io/docs/