我正在尝试使用 javascript 中的 websockify 将我的节点 tcp 服务器连接到我的 socket.io 服务器。我在https://github.com/novnc/websockify/wiki/websock.js找到了它的 git repo ,但似乎找不到如何在代码中启动它。任何人都可以提供一个示例或指向我的 js 版本的某种文档吗?另外,当我从 npm 下载 websockify 时,我没有收到 websock.js,如果有人能告诉我如何做到这一点,我将不胜感激。
3 回答
Websocket 需要一个 HTTP(s) 服务器。您无法将其连接到 TCP 服务器。
你可以试试express.js。
socket.io 服务器只能与 socket.io 客户端通信。因此,您不能将普通的 TCP 服务器连接到 socket.io 服务器。要连接到 socket.io 服务器,您需要一个 socket.io 客户端。您当然可以获得 node.js 的 socket.io-client,然后您可以使用它连接到 socket.io 服务器。
让我解释一下。socket.io 建立在 webSocket 之上,并且在 webSocket 之上有自己的连接发起。webSocket 使用 HTTP 发起连接,然后在一些连接握手之后切换到 webSocket 协议。如果缺少任何这些部分,则连接将无法建立和/或在连接后不久将关闭。
因此,要连接到 socket.io 服务器,必须执行以下所有操作:
- 必须启动 socket.io 客户端连接请求。
- 这将向 socket.io 服务器发出 HTTP 请求并发送一些自定义数据。
- 经过一些初始的来回后,socket.io 客户端将启动一个 webSocket 连接作为主要传输。
- 该 webSocket 连接将从带有升级标头的自定义 HTTP 请求开始,该升级标头指定“升级”到 webSocket 协议的请求,它还将包含一些用于 webSocket 安全性的自定义标头。
- 服务器对升级请求做出肯定响应,并返回一些与安全相关的标头。
- 协议从 HTTP 切换到 webSocket。
- 此套接字上的所有通信现在都使用 webSocket 数据帧格式和相关的 webSocket 安全性。
- 现在,当 socket.io 想要通过这个连接发送数据时,它会在 webSocket 数据帧格式之上添加自己的更高级别的数据包格式。
因此,只有使用支持的传输(通常是 webSocket)的 socket.io 客户端才能连接到 socket.io 服务器。您不能使用 webSocket 客户端连接到 socket.io 服务器。您不能使用普通的 TCP 客户端。您不能使用 HTTP 客户端。
此外,您不能使用 webSocket 代理(它看起来像 websockify)来连接到 socket.io 服务器。webSocket 客户端无法连接到 socket.io 服务器。– jfriend00