使用 socket.io还是使用 websocket

前言

在开发聊天机器人的过程中,我遇到了一个选择,是直接使用 websocket 还是使用 socket.io。

我查找了很多资料,想了解清楚两者的差异,无奈很多文章都是大同小异,没什么有营养的东西,不过最终我还是在 stackoverflow 上找到了我想要的答案

原文解释了几个关于 websocket 和 socket.io 的误区,并给出实验结果。实验结果同学们可以自己看。

下面是作者指出的三个常见误区:

  1. 使用 sokcet.io 要比直接用 websocket 简单很多。
  2. 浏览器对 Websocket 的支持还不全面。
  3. 当老的浏览器不支持 Websocket 时,socket.io 会降级进行其他方式的连接。 实际情况不是这样的,socket.io 在初始连接的时候,是使用 AJAX 方式进行连接,在交换信息之后确定浏览器支持 Websocket 了,才升级到 Websocket 方式。

从这里可以看到这两者从明显的区别就是,socket.io 无论何时都是先用 AJAX 的方式建立连接的。然后会经过大概 3 个长轮询之后再升级到 Websocket。

比较

根据比较我们可以总结一下两者的使用场景:

Websocket 是一个 Web 标准,它非常轻巧,因为它本身是受浏览器支持的(除了 IE9 及以前版本)

socket.io 支持更多的浏览器,如果你需要支持的浏览器不支持 Websocket,那 socket.io 无疑是你的选择。

参考

socket.io 和 websockets 之间的区别