2017-01-02 8 views
0

運用変換にライブラリ(ShareDB)を使用しています。サーバー側とクライアント側は、websocket-json-streamを使用して通信します。しかし、このShareDBは、私の主要なWebフレームワークがTornado(Python)であるため、nodejs上でサービスとして実行されています(私はノードプロセスを制御するためにzerorpcを使用しています)。このthreadから、TCPなどのステートフルなプロトコルでは、クライアントポートによって接続が区別される(したがって、1つのサーバーポートのみが必要である)ことが分かりました。このresponse regarding how websockets handle multiple incoming requestsによれば、tcpとwebsocketの間の基礎となるトランスポートチャネルに違いはありません。複数のWebソケットを区別する

私の質問は、クライアントからPythonサーバー、さらにはクライアントから自分のnodejsコード(ShareDBサービス)にwebsocketを作成した場合、サーバーはどのソケットがどのサーバーに接続されているかを区別できますか? (つまり、最初にPythonサーバーとの通信を確立してから、2番目のWebSocketの受信を開始するために)1つのソケットだけを「リッスン」することはサーバーの責任ですか?

+0

何につながっているのかよくわからない。あなたは、あなたが意味することについての十分な説明がなくても、「サーバ」および「クライアント」という用語を使用します。あなたは2つのサーバー(pythonサーバーとnodejsサーバー)とクライアントを持っているようです。だから、私はクライアントがあなたの2つの別々のサーバーのそれぞれに接続していると仮定します。しかし、どのようにサーバーを区別できるかを尋ねますが、各サーバーは特定のクライアントに対して1つの接続しか持たないようにしてください。あなたがしようとしていることについては混乱しています。参考までに、通常は着信http接続とCookieの識別方法と同じ方法で着信webSocket接続を識別します。 – jfriend00

+0

クライアントから同じ物理サーバーコンピュータ上の別のサーバーに接続している場合、各サーバープロセスは別のポートで待機し、クライアントは適切なポートに接続してそのサーバーを識別しますに接続しています。 – jfriend00

+0

ありがとう、私はそれを整理したよりも要約したと思いますので、私は言葉を編集します。両方のサーバーが同じ物理システム上にあります...私はHerokuを使用していますが、理解しているとおり、単一のポートのみを開くことができます。 – Flaminator

答えて

1

実行する最も簡単な方法同じ物理サーバーボックス上の2つのサーバープロセスは、それぞれが異なるポートで待機するようにし、クライアントはそのサーバー上の適切なポートに接続して、接続しようとしているサーバーを示します。

サーバ環境のために1つの着信ポートだけがある場合は、プロキシのようなものを使用できます。あなたはまだ2つのサーバーが異なるポートでリッスンしていますが、どちらも外部に開いているポートでリッスンしていません。プロキシは、外部に開いている1つの着信ポートをリッスンし、着信接続の特性に基づいて、着信接続を適切なサーバープロセスに指示します。

プロキシは、URLまたはDNSホスト名を使用して接続しようとしているプロセスを識別するように構成できます。

関連する問題