gpt4 book ai didi

javascript - 你能使现有的 Tcp 连接成为一个 Websocket 到客户端吗?

转载 作者:可可西里 更新时间:2023-11-01 02:50:34 27 4
gpt4 key购买 nike

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

即A -tcp-> B -websocket-> 客户端

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


客户端 -> GET/websocket -> 服务器 B -tcp -> 服务器 A
服务器 A -数据-> 服务器 B -数据> 客户端

我对 TCP 连接及其协议(protocol)的理解相当有限。据我所知,网络套接字存在于 TCP 连接中,但通过不同的协议(protocol)(HTTP?)传输数据。在 this video 中对它们的工作方式进行了详尽的描述。 ,虽然很多都在我头上。在一节中,她描述了如何将“ key ”字符串从客户端传递到服务器,然后服务器神奇地生成一个“接受”字符串并将响应发送给客户端。

picture

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


客户端-websocketKey-> 服务器 B -websocketKey-> 服务器 A -websocketAccept-> 服务器 B -websocketAccept-> 客户端

感谢您的帮助,由于我在这方面没有经验,请您回复。

最佳答案

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

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

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


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

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

关于javascript - 你能使现有的 Tcp 连接成为一个 Websocket 到客户端吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45394478/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com