将 Nodejs tcp 服务器连接到 websockit

Connecting Nodejs tcp server to a websockit

我正在尝试使用 javascript 中的 websockify 将我的节点 tcp 服务器连接到我的 socket.io 服务器。我在 https://github.com/novnc/websockify/wiki/websock.js 找到了它的 git 仓库 ,但似乎找不到如何在代码中启动它。任何人都可以提供一个例子或给我指出某种 js 版本的文档吗?另外,当我从 npm 下载 websockify 时,我没有收到 websock.js,如果有人能告诉我如何做到这一点,我将不胜感激。

Websocket 需要 HTTP(s) 服务器。您无法将其连接到 TCP 服务器。

你可以试试express.js.

socket.io 服务器只能与 socket.io 客户端通信。因此,您无法将普通 TCP 服务器连接到 socket.io 服务器。要连接到 socket.io 服务器,您需要一个 socket.io 客户端。您当然可以获得 node.js 的套接字。io-client,然后您可以使用它连接到 socket.io 服务器。

让我解释一下。 socket.io 建立在 webSocket 之上,并且在 webSocket 之上有自己的连接启动。 webSocket 使用 HTTP 发起连接,然后在一些连接握手后切换到 webSocket 协议。如果缺少任何这些部分,连接将无法建立 and/or 将在连接后不久 shut-down。

因此,要连接到 socket.io 服务器,必须满足以下所有条件:

  1. 必须发起 socket.io 客户端连接请求。
  2. 这将向 socket.io 服务器发出 HTTP 请求并发送一些自定义数据。
  3. 经过一些初始 back-and-forth 后,socket.io 客户端将启动一个 webSocket 连接作为主要传输。
  4. 该 webSocket 连接将从带有升级 header 的自定义 HTTP 请求开始,该请求指定对 "upgrade" 到 webSocket 协议的请求,并且还将包含一些自定义 headers用于 webSocket 安全。
  5. 服务器肯定响应升级请求,并且 returns 一些 security-related headers.
  6. 协议从 HTTP 切换到 webSocket。
  7. 此套接字上的所有通信现在都使用 webSocket 数据帧格式和关联的 webSocket 安全性。
  8. 现在,当 socket.io 想要通过此连接发送数据时,它会在 webSocket 数据帧格式之上添加自己的高级数据包格式。

因此,只有 socket.io 客户端使用受支持的传输(通常是 webSocket)可以连接到 socket.io 服务器。您不能使用 webSocket 客户端连接到 socket.io 服务器。您不能使用普通的 TCP 客户端。您不能使用 HTTP 客户端。

此外,您不能使用 webSocket 代理(它看起来像 websockify)连接到 socket.io 服务器。 webSocket 客户端无法连接到 socket.io 服务器。 – jfriend00