区分多个Websockets

时间:2017-01-02 20:13:06

标签: python node.js sockets websocket tornado

我正在使用库(ShareDB)进行操作转换,服务器和客户端使用websocket-json-stream进行通信。然而,这个ShareDB作为服务在nodejs上运行(我使用zerorpc来控制我的节点进程),因为我的主要Web框架是Tornado(python)。我从这个thread了解到,使用TCP等有状态协议,连接由客户端端口区分(因此只需要一个服务器端口)。根据这个response regarding how websockets handle multiple incoming requests,tcp和websockets之间的底层传输通道没有区别。

所以我的问题是,如果我创建一个从客户端到python服务器的websocket,然后从客户端到我的nodejs代码(ShareDB服务),服务器如何区分哪个套接字与哪个?服务器是否有责任在给定时间内只有一个套接字“监听”连接(即首先与Python服务器建立通信然后开始侦听第二个websocket?)

1 个答案:

答案 0 :(得分:2)

在同一物理服务器上运行两个服务器进程的最简单方法是让每个服务器进程在不同的端口上侦听,然后客户端连接到该服务器上的相应端口,以指示它尝试连接到哪个服务器

如果由于您的服务器环境而只能有一个传入端口,那么您可以使用类似代理的东西。您仍然有两台服务器在不同的端口上侦听,但是没有一台服务器正在侦听对外开放的端口。代理侦听一个对外部世界开放的传入端口,然后根据传入连接的某些特征,代理将传入连接定向到相应的服务器进程。

可以将代理配置为通过URL或DNS主机名识别您尝试连接的进程。