【问题标题】:Connecting Nodejs tcp server to a websockit将 Nodejs tcp 服务器连接到 websockit
【发布时间】:2018-11-24 18:14:42
【问题描述】:

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

【问题讨论】:

  • 如果您真的希望这段代码是关于如何使 websockify 为您工作的,那么请显示您正在使用的特定代码,因为这是有人可以帮助您解决代码问题的唯一方法。 websockify 的唯一通用帮助(没有任何代码)就是去阅读文档,您可以在没有我们帮助的情况下完成,而我们无法帮助您。

标签: node.js websocket socket.io websockify


【解决方案1】:

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 服务器,必须满足以下所有条件:

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

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

【讨论】:

  • 虽然我明白这一切。我的问题更多与 websockify 的使用有关,因为它应该通过处理 TCP 和 websockets 之间的握手协议来弥合 TCP 和 websockets 之间的差距。我已经很好地设置了它的客户端,我想做的是让我的两台服务器进行通信。
  • @Eduardo - 我不明白你为什么要尝试使用 websockify 或者你想用它来完成什么。它似乎是某种代理。您能描述一下您要解决的总体问题吗?您问题的第一句话是这样说的:我正在尝试将我的节点 tcp 服务器连接到我的 socket.io 服务器。解决该问题的常用方法是使用节点程序中的 socket.io 客户端库连接到 socket.io 服务器。因此,目前还不清楚您为什么要尝试使用 websockify。
  • @Eduardo - 此外,您不能使用 webSocket 代理(它看起来像 websockify)来连接到 socket.io 服务器。 webSocket 客户端无法连接到 socket.io 服务器。
  • 哦,好吧,我很抱歉。我没有意识到这是一个代理。谢谢你的澄清
  • @Eduardo - 这能回答你的问题吗?如果是这样,请通过单击答案左侧的复选标记向社区展示。这也将为您在此处遵循正确的程序赢得一些声誉积分。如果没有,请指出尚未回答的内容。
【解决方案2】:

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

你可以试试express.js。

【讨论】:

    【解决方案3】:

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

    【讨论】:

    猜你喜欢
    • 2016-08-26
    • 1970-01-01
    • 1970-01-01
    • 2019-12-19
    • 1970-01-01
    • 2012-07-30
    • 2021-04-20
    • 2020-09-17
    • 2019-12-28
    相关资源
    最近更新 更多