【问题标题】:Can you make existing Tcp connection a Websocket to Client您可以将现有的 Tcp 连接作为 Websocket 连接到客户端吗
【发布时间】:2018-01-05 18:17:26
【问题描述】:

我的情况是,我在后端使用 tcp 连接将数据从服务器 A 流式传输到服务器 B。服务器 A 正在运行客户端以与数据库通信。 SERVER B 正在运行 Web 服务器来处理来自客户端的请求。 SEVER B 需要通过 Web 套接字将数据从 SERVER A 流式传输到 CLEINT。

i.e. A -tcp-> B -websocket-> CLIENT

当前,当客户端在 /websocket 处请求页面时,我正在服务器 B 上打开一个 Web 套接字。 /websocket 将返回 html 页面以在服务器 B 上建立连接 websocket。一旦建立连接,我将在 websocket 打开时打开到服务器 A 的新 tcp 连接,并通过 websocket 连接将数据从 B 的 tcp 连接传递到 A 到客户端.

i.e. CLIENT -> GET /websocket -> SERVER B -tcp-> SERVER A SERVER A -data-> SERVER B -data> CLIENT

我对 TCP 连接及其协议的理解相当有限。据我所知,TCP 连接中存在一个 Web 套接字,但通过不同的协议(HTTP?)传输数据。在this video 中对它们的工作方式进行了详尽的描述,尽管其中很多内容都超出了我的想象。有一节她描述了“密钥”字符串如何从客户端传递到服务器,服务器神奇地生成一个“接受”字符串并向客户端发送响应。

这可能是一个愚蠢的问题,但我想知道是否有某种方法可以将密钥从客户端通过服务器 B 转发到服务器 A,而无需创建从服务器 B 到客户端的 tcp 连接。这里的目标是让 CLIENT 在 /websocket 被命中时只创建一个到 SERVER A 的连接。

i.e. CLIENT -websocketKey-> SERVER B -websocketKey-> SERVER A -websocketAccept-> SERVER B -websocketAccept-> CLIENT

感谢您的帮助,由于我在这方面缺乏经验,请在您的回复中保持友好。

【问题讨论】:

    标签: javascript tcp websocket tcpclient


    【解决方案1】:

    您所描述的是代理或网关功能,其中服务器 B 充当服务器 B 和客户端之间的中介,并处理服务器 A 和客户端使用不同协议以及客户端无法直接连接到服务器 A 的事实。这是完全可行的。

    1. 客户端与服务器 B 建立 webSocket 连接。
    2. 服务器 B 接受该连接。
    3. 服务器 B 连接到服务器 A 并通过 TCP 请求数据(使用某些专有协议)。
    4. 服务器 B 开始从服务器 A 接收数据。对于从服务器 A 接收到的每个有意义的“数据块”,它会通过 webSocket 将该数据发送到客户端,并确保它采用客户端能够理解的格式。
    5. 客户端开始接收数据块。

    您如何处理从服务器 B 来的任何格式的数据到您想通过 webSocket 发送的任何格式的转换,这完全是特定于应用程序的,取决于您。可能您可以直接发送来自服务器 A 的原始数据,或者您可能需要以某种方式对其进行清理以使客户端更容易理解。


    我不明白你在说什么 webSocketKey。 webSocket 连接使用安全密钥作为建立连接的一部分,但这应该完全由客户端和服务器 B 上的各种 webSocket 库为您处理。您根本不必参与其中。您没有建立从客户端到服务器 A 的 webSocket 连接。您正在建立从客户端到服务器 B 的 webSocket 连接,然后是从服务器 B 到服务器 A 的正常 TCP 连接。服务器 B 正在发挥作用中间人从服务器 A 获取数据,然后通过不同的连接将其发送到客户端。您有两个独立的连接:

           webSocket              Your TCP connection 
                                 (proprietary protocol)
     client <--> server B        server B <--> server A
    

    【讨论】:

    • @mattcatellier - 这能回答你的问题吗?如果是这样,您可以通过单击答案左侧的绿色复选标记向社区表明这一点,这也将为您赢得一些声誉积分。
    猜你喜欢
    • 1970-01-01
    • 2010-11-18
    • 2015-10-04
    • 2015-05-22
    • 1970-01-01
    • 2013-03-21
    • 1970-01-01
    • 2015-11-30
    • 1970-01-01
    相关资源
    最近更新 更多