node.js 是一个通用的基于 javascript 的运行时环境(有点类似于其他语言运行时,如范围内的 python)。您可以在其中创建甚至不使用网络的应用程序。它通常用作创建的 Web 应用程序的 Web 服务器,并具有一组出色的工具和丰富的附加组件库。它不需要socket.io。
socket.io 是一个特定的库,用于在客户端和服务器之间启用类似 web-socket 的通信(例如,聊天室应用程序就是典型示例)。 socket.io 的服务器端假定一个 javascript 运行时(因为它是用 javascript 编写的),所以这通常意味着 node.js(尽管我不确定是否可以替换不同的 JS 运行时)。
您可以将node.js 视为平台,将socket.io 视为执行在该平台上运行的特定工作的特定工具。如果您需要客户端和服务器之间的 Web 套接字连接,您可以使用 socket.io(在 node.js 之上)。
如果您需要 node 擅长的任何其他事情,但不需要 websocket 连接,您将只使用node.js。
websockets 本身可以在没有socket.io 和node.js 的情况下在服务器端进行编程。它们可以用 Strait C++ 或 Java 编程。但是socket.io(在节点中运行)提供了一种非常简单的设置它们的方法,因为socket.io 库在一个库和一个 API 中涵盖了客户端和服务器,并且它们都使用相同的语言(javascript)。查看 socket.io 网站上的聊天室应用程序示例,您将不太可能找到任何其他解决方案,可以用尽可能少的代码行并在客户端和服务器上使用相同的界面。
如果您只是设置 websocket 服务器(没有任何类型的 web 服务器或 web 应用程序),您仍然可以使用 node 和 socket.io 并将其仅用于 websocket 服务器,它仍然会非常有效。虽然 node 能够做很多其他事情,但如果您不配置和安装所有其他事情,它们不会花费您任何成本 - 它们只是未运行的未使用功能。
我应该补充一点,socket.io 库所做的另一件事是它处理客户端和服务器之间的自动协商,以找到客户端和服务器进行通信的最佳通道。如果 websockets 可用,那么 socket.io 可能会使用它们,但是如果 web sockets 不可用,socket.io 有替代方法可以工作(即使在旧浏览器中)。这个功能在 socket.io 中是免费的,你甚至不需要做任何事情。
如果您对此不完全清楚,websockets 通常用于在客户端和服务器之间提供实时通信。虽然客户端可以随时通过 ajax 调用或网页请求从服务器请求数据,但 websockets 允许的是客户端和服务器之间的双向实时通信,websockets 的最大优点是服务器可以发送一个客户端连接时随时获取实时数据。
例如,我有一个网页,只要网页打开,它就会从我的服务器接收实时数据。网页通过典型的 node.js 网络服务器安装提供服务,但实时数据通过 websocket 连接从服务器发送到客户端。
此外,如果客户端和服务器之间发生闲聊,websockets 可以比一系列 ajax 调用更有效率,因为使用 websocket,连接打开一次并重复使用,而使用 ajax,每个连续的 ajax 调用就像一个新的连接。