ポート3000のHTTPサーバーでWebアプリを実行しています。このアプリはポート9001のWebSocketサーバーに接続されています。WSサーバーとHTTPサーバーの両方が同じVM内にあります。
アプリをローカル(VM内)でテストすると、すべて正常に動作します。 WebアプリとWSサーバーの両方が相互に通信できます。次のように、アプリとサーバーの両方がlocalhostで接続をリッスンします。
Webアプリ(ReactJS):const sock = new WebSocket('ws://localhost:9001/');
WSサーバー(Python):ws = WebsocketServer(Host='127.0.0.1', port=9001)
これを設定して外部接続を許可すると、WebアプリとWSサーバーは通信できなくなります。サーバーは_Host='127.0.0.1'
_で接続を待機します。 Webアプリのフロントエンドコードは、VMが実行されるマシンに接続するように変更されます(_123.45.67.890
_としましょう):
Webアプリ(ReactJS):const sock = new WebSocket('ws://123.45.67.890:9001/');
ポート3000と9001の両方でポート転送を有効にし、VM内から両方のポートでファイアウォールを無効にしました。ホストマシンで両方のポートが開いています。
_123.45.67.890:3000
_を使用して外部からWebアプリにアクセスできるので、VMへの接続が開いていることは確かです。ただし、Webアプリはポート9001のWSサーバー。これの原因は何か考えがありますか?
OS情報が役立つ場合に備えて:
VMホスト:Microsoft Windows 7 Enterprise (6.1.7601 Service Pack 1 Build 7601)
VMゲスト:CentOS Linux release 7.4.1708 (Core)
これは簡単に修正でき、私が使用している websocket server のドキュメントにも書かれています。
次のws = WebsocketServer(Host='0.0.0.0', port=9001)
のようにWSサーバーをインスタンス化して、すべての着信接続をリッスンする必要があるだけです。