从socket.io移动到原始websockets?

boo*_*oom 8 websocket socket.io

现在我正在使用带有强制websockets作为传输的socket.io.我正在考虑转移到原始websockets,但我不清楚我将失去什么功能从socket.io.谢谢你的指导.

jfr*_*d00 18

socket.io库添加了标准webSockets之外的以下功能:

  1. 如果浏览器不支持webSockets或者网络路径具有阻止webSockets的代理/防火墙,则自动选择长轮询与webSocket.

  2. 如果连接断开,则自动重新连接客户端(即使服务器重新启动).

  3. 自动检测死连接(通过使用常规ping来检测无效连接)

  4. 消息传递方案,自动转换为/从JSON.

  5. 房间的服务器端概念,可以很容易地与一组连接的用户进行通信.

  6. 连接到服务器上的命名空间而不是仅连接到服务器的概念.这可用于各种不同的功能,但我用它来告诉服务器我想订阅哪些类型的信息.这就像连接到特定频道.

  7. 服务器端数据结构,可自动跟踪所有连接的客户端,以便您随时枚举它们.

  8. socket.io库内置的中间件体系结构,可用于实现诸如可从原始连接访问cookie的身份验证之类的内容.

  9. 首次连接时自动存储连接上存在的cookie和其他标头(对于识别连接的用户非常有用).

  10. 服务器端广播功能,用于向所有连接的客户端,房间中的所有客户端或命名空间中的所有客户端发送公共消息.

  11. 使用消息名称标记每条消息并将消息名称路由到eventEmitter,以便通过在eventEmitter上侦听所需的消息名称来侦听传入消息.

  • @Myst - 如果浏览器不支持webSockets,socket.io绝对支持长轮询.而且,您可能希望了解所有webSocket连接都以常规HTTP请求(其中设置了一些自定义标头)开始.有关详细信息,请参阅http://stackoverflow.com/questions/31282578/why-is-my-socket-io-using-long-polling-instead-of-the-websocket.实际上,除了webSocket之外,socket.io还支持多种传输.长轮询就是其中之一. (3认同)
  • 中间件和 Cookie 不仅仅是 socket.io 的一个特性,它们是常见的框架特性,可能也适用于其他框架......此外,它与 websocket 层几乎没有关系(如果有的话),更多的是与http 层。我建议将它们从列表中删除。话虽如此,不错的答案……尽管我希望了解有关某些内容的更多技术细节。 (2认同)