2017-01-02 255 views
0

我正在使用库(ShareDB)进行操作转换,并且服务器和客户端使用websocket-json-stream进行通信。然而,这个ShareDB是作为一个服务在nodejs上运行的(我使用zerorpc来控制我的节点进程),因为我的主要web框架是Tornado(python)。我从这个thread了解到,使用TCP等有状态协议时,客户端端口的连接是不同的(因此只需要一个服务器端口)。根据这个response regarding how websockets handle multiple incoming requests,tcp和websockets之间的底层传输通道没有区别。所以我的问题是,如果我从客户端创建一个websocket到python服务器,然后也从客户端到我的nodejs代码(ShareDB服务)如何区分哪个套接字与哪个套接字?服务器的责任是在给定的时间只有一个套接字“监听”连接(即先建立与Python服务器的通信,然后开始监听第二个websocket?)区分多个Websocket

+0

我不能完全遵循什么是连接到什么。你用“服务器”和“客户端”这个术语来描述你的意思。听起来你有两台服务器(一台python服务器和一台nodejs服务器)和一台客户机。所以,我会假设客户端连接到您的两台独立服务器中的每一台。但是,然后你问服务器如何区分,但每个服务器应该只有一个连接到给定的客户端?对你想要做的事感到困惑。仅供参考,您通常会使用与使用Cookie识别传入http连接的相同方式识别传入webSocket连接。 – jfriend00

+0

如果您要从客户端连接到同一物理服务器计算机上的每个单独服务器,则每个服务器进程都将监听另一个端口,并且客户端将连接到相应的端口以确定它是哪个服务器连接到。 – jfriend00

+0

谢谢,我认为你总结得比我更好,所以我会编辑措辞。两台服务器都在同一个物理系统上......我使用Heroku,据我所知它们只允许单个端口打开。 – Flaminator

回答

1

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

如果你的服务器环境只能有一个入站端口,那么你可以使用类似代理的东西。您仍然有两台服务器在不同的端口上侦听,但是没有人在侦听对外开放的端口。代理侦听对外部开放的一个传入端口,然后根据传入连接的某些特征,代理将该传入连接指向适当的服务器进程。

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