2017-07-29 62 views
1

我在的情况下我使用后端的TCP连接流从服务器到服务器B服务器的数据运行的客户端与数据库对话。 SERVER B正在运行Web服务器来处理来自客户端的请求。 SEVER B需要通过网络套接字将数据从服务器A传输到CLEINT。你可以让现有的TCP连接的WebSocket向客户

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

目前,我的服务器B上打开网络插座,当客户端在/ WebSocket的请求页面。 /的WebSocket将返回HTML页面建立在服务器B上连接的WebSocket一旦建立连接,我打开一个新的TCP连接到服务器,而WebSocket的是开放的,从B的TCP连接,一个路过的数据,通过WebSocket连接到客户端。

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

我的TCP connetions及其协议的理解是相当有限的。从我可以收集的内容来看,一个Web套接字存在于TCP连接中,但是通过不同的协议(HTTP?)传输数据。有关于他们如何在this video中工作的详尽描述,尽管它很多都在我的头上。有一节介绍了如何将“密钥”字符串从客户端传递到服务器,并且服务器奇迹般地生成“接受”字符串并向客户端发送响应。

picture

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

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

感谢您的帮助,并请善待你的答复,因为我在这方面没有经验。

回答

1

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

  1. 客户端发出接受连接WebSocket连接到服务器B.
  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 
+0

@mattcatellier - 这是回答您的问题吗?如果是这样,您可以通过点击答案左侧的绿色复选标记来向社区表明这一点,这也会为您赢得一些声望点。 – jfriend00

相关问题