现在我正在使用带有强制 websockets 的 socket.io 作为传输。我正在考虑迁移到原始 websockets,但我不清楚从 socket.io 中我将失去哪些功能。感谢您的任何指导。
socket.io 库在标准 webSockets 之外添加了以下功能:
如果浏览器不支持 webSockets 或网络路径具有阻止 webSockets 的代理/防火墙,则自动选择长轮询与 webSocket。
如果连接断开(即使服务器重新启动),客户端会自动重新连接。
自动检测死连接(通过使用常规 ping 检测无效连接)
具有与 JSON 的自动转换的消息传递方案。
房间的服务器端概念,可以轻松与一组连接的用户进行通信。
连接到服务器上的命名空间而不是仅仅连接到服务器的概念。这可以用于各种不同的功能,但我用它来告诉服务器我想要订阅哪些类型的信息。这就像连接到特定 channel 。
服务器端数据结构,可自动跟踪所有连接的客户端,以便您随时枚举它们。
socket.io 库中内置的中间件架构,可用于实现身份验证等功能,并从原始连接访问 cookie。
首次连接时自动存储连接上的 cookie 和其他 header (对于识别连接的用户非常有用)。
服务器端广播功能,用于向所有连接的客户端、房间中的所有客户端或命名空间中的所有客户端发送公共(public)消息。
使用消息名称标记每条消息并将消息名称路由到 eventEmitter 以便您通过在 eventEmitter 上监听所需消息名称来监听传入消息。
客户端或服务器发送消息然后等待对该特定消息的响应的能力(回复功能或请求/响应模型)。