您可以将现有的Tcp连接作为Websocket连接到客户端

时间:2017-07-29 22:02:04

标签: javascript tcp websocket tcpclient

我处在这样一种情况,即我在后端使用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中工作的详尽描述,尽管其中很多都是我的想法。有一节描述了如何将“密钥”字符串从客户端传递到服务器,服务器神奇地生成“接受”字符串并向客户端发送响应。

picture

这可能是一个愚蠢的问题,但我想知道是否有某种方法可以将该密钥从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

感谢您的帮助,请您回复,因为我在这方面缺乏经验。

1 个答案:

答案 0 :(得分:1)

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

  1. 客户端与服务器B建立webSocket连接。
  2. 服务器B接受该连接。
  3. 服务器B连接到服务器A并通过TCP(使用某些专有协议)请求数据。
  4. 服务器B开始从服务器A接收数据。对于每个有意义的"块"它从服务器A收到的数据,通过webSocket将数据发送到客户端,确保它采用客户端理解的格式。
  5. 客户端开始接收数据块。
  6. 如何处理从服务器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