2017-01-02 10 views
0

Ich verwende eine Bibliothek (ShareDB) für die operative Transformation, und die Server-und Client-Seite verwenden einen Websocket-Json-Stream zur Kommunikation. Allerdings wird diese ShareDB auf Nodejs als Dienst ausgeführt (ich verwende zerorpc, um meine Knotenprozesse zu steuern), da mein Haupt-Web-Framework Tornado (Python) ist. Ich verstehe aus dieser thread, dass mit einem Stateful-Protokoll wie TCP, die Verbindungen durch den Client-Port unterschieden werden (so dass nur ein Server-Port erforderlich ist). Und gemäß dieser response regarding how websockets handle multiple incoming requests gibt es keinen Unterschied in dem zugrundeliegenden Transportkanal zwischen tcp und websockets.Differenzieren mehrerer Websockets

Also meine Frage ist, wenn ich einen Websocket vom Client zum Python-Server und dann auch vom Client zu meinem Nodejs-Code (der ShareDB-Dienst) erstellen, wie kann der Server unterscheiden, welcher Sockel mit welchem ​​geht? Ist es die Verantwortung des Servers, nur einen einzigen Socket zu haben, der eine Verbindung zu einer bestimmten Zeit "abhört" (dh zuerst die Kommunikation mit dem Python-Server herzustellen und dann nach dem zweiten Websocket zu horchen?)

+0

Ich kann nicht ganz folgen, was mit was verbindet. Sie verwenden den Begriff "Server" und "Client" ohne ausreichende Beschreibung für das, was Sie meinen. Es klingt, als hätten Sie zwei Server (einen Python-Server und einen Nodejs-Server) und einen Client. Ich würde also annehmen, dass der Client sich mit jedem Ihrer zwei separaten Server verbindet. Aber dann fragen Sie, wie der Server unterscheiden kann, aber jeder Server sollte nur eine Verbindung zu einem bestimmten Client haben? Verwirrt darüber, was Sie versuchen zu tun. Zu Ihrer Information: Normalerweise würden Sie eingehende WebSocket-Verbindungen genauso identifizieren wie eingehende HTTP-Verbindungen mit Cookies. – jfriend00

+0

Wenn Sie eine Verbindung vom Client zu jedem Ihrer separaten Server auf demselben physischen Servercomputer herstellen, würde jeder Ihrer Serverprozesse auf einem anderen Port warten und der Client würde sich mit dem entsprechenden Port verbinden, um den Server zu identifizieren verbinden mit. – jfriend00

+0

Danke, ich denke du hast es besser zusammengefasst als ich es formuliert habe, also werde ich die Formulierung bearbeiten. Beide Server sind auf demselben physikalischen System ... Ich benutze Heroku und wie ich es verstehe, erlauben sie nur einen einzigen Port offen zu sein. – Flaminator

Antwort

1

Der einfachste Weg zu laufen Bei zwei Serverprozessen auf derselben physischen Serverbox muss jeder von ihnen auf einem anderen Port warten und dann stellt der Client eine Verbindung mit dem entsprechenden Port auf diesem Server her, um anzugeben, mit welchem ​​Server er eine Verbindung herstellen möchte.

Wenn Sie aufgrund Ihrer Serverumgebung nur einen eingehenden Port haben können, können Sie etwas wie einen Proxy verwenden. Ihre zwei Server hören immer noch auf unterschiedlichen Ports, aber keiner hört auf den Port, der für die Außenwelt offen ist. Der Proxy überwacht den einen eingehenden Port, der für die Außenwelt offen ist, und dann leitet der Proxy basierend auf einigen Eigenschaften der eingehenden Verbindung diese eingehende Verbindung an den entsprechenden Serverprozess weiter.

Der Proxy kann so konfiguriert werden, dass er über die URL oder den DNS-Hostnamen identifiziert, mit welchem ​​Prozess Sie eine Verbindung herstellen möchten.