2017-02-21 13 views
1

私は既にウェブソケットについて知っていますが、彼らは素晴らしいです。彼らの問題は、通信できるように接続を開いたままにしなければならないということです。サーバからクライアントへのリクエスト

私は時々サーバーがステータスを更新してクライアントに通知し、すべてのクライアントからの接続を開いたままにしておくことが最適ではない小さなシステムを持っています。同時に、クライアント側の更新を間に合わせることが非常に重要です。

私の質問は、サーバーが一意のアドレスを持っている場合、クライアントはサーバーが要求を送信できるパブリックの一時アドレスを持っていますか?したがって、クライアントがサーバーに接続すると、そのアドレスに固有のアドレスが提供され、サーバーによってキャッシュされます。更新があると、サーバーはそのアドレスに要求を送信します。

住所が絶えず変更されるため、多くの問題があることを理解していますが、これは既に他の質問です。

答えて

1

クライアントに専用のIPアドレスがない場合は、そのノードに接続されているノードとの接続がない限り、WANからは使用できません。

ローカルネットワークのクライアントから要求が送信されると、クライアントのローカルIPアドレスとポートが記憶され、NATプロトコルを使用してルータの空きポートの1つに変換され、ルータの独自のIP-送信者のアドレス 'とTCPヘッダーの'送信者のポート 'を含む。ルータがサーバの応答を取得すると、メモリからNATテーブルを使用してアドレスを変換し、クライアントにデータを配信します。サーバとクライアントとの間の接続が開いている間、アドレスは通常NATテーブルに保持されます。したがって、サーバーとローカルネットワーククライアントの間に接続が確立されていない場合、サーバーはクライアントと接続できません。これは、サーバーが接続方法を知らないためです。

あなたは小さなシステムを持っていると言います。なぜ、あなたはWebSocketを扱うのにあなたのサーバーに十分な空きポートがないと思いますか?サーバーからの更新を取得したいだけであれば(永続的に開かれた接続を介してデータを送信したり取得したりするのではなく)、長いポーリングまたはSSEが適しているでしょう。ウェブソケットよりも実装が簡単です。

関連する問題