我处在这样一种情况,即我在后端使用tcp连接将数据从SERVER A传输到SERVER B. SERVER A正在运行客户端与数据库通信。 SERVER B正在运行Web服务器来处理来自客户端的请求。 SEVER B要求通过Web套接字将数据从SERVER A传输到CLEINT。
i.e. A -tcp-> B -websocket-> CLIENT
目前,当CLIENT在/ websocket请求页面时,我正在SERVER B上打开一个Web套接字。 / websocket将返回html页面以在SERVER B上建立连接websocket。一旦建立连接,我将在websocket打开时打开与SERVER A的新tcp连接,并将数据从B的tcp连接传递到A,通过websocket连接到客户端
i.e.
CLIENT -> GET /websocket -> SERVER B -tcp-> SERVER A
SERVER A -data-> SERVER B -data> CLIENT
我对TCP连接及其协议的理解相当有限。从我可以收集到的内容,TCP套接字中存在一个Web套接字,但是通过不同的协议(HTTP?)传输数据。有一个关于它们如何在this video中工作的详尽描述,尽管其中很多都是我的想法。有一节描述了如何将“密钥”字符串从客户端传递到服务器,服务器神奇地生成“接受”字符串并向客户端发送响应。
这可能是一个愚蠢的问题,但我想知道是否有某种方法可以将该密钥从CLIENT,通过SERVER B转发到SERVER A,而无需创建从SERVER B到CLIENT的tcp连接。这里的目标是当/ websocket被命中时,CLIENT只与SERVER A建立一个连接。
i.e.
CLIENT -websocketKey-> SERVER B -websocketKey-> SERVER A -websocketAccept-> SERVER B -websocketAccept-> CLIENT
感谢您的帮助,请您回复,因为我在这方面缺乏经验。
答案 0 :(得分:1)
您所描述的是代理或网关功能,其中服务器B充当服务器B和客户端之间的中介,并处理服务器A和客户端说不同协议以及客户端无法直接连接到服务器A这一事实。这是完全可行的。
如何处理从服务器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