Назад | Перейти на главную страницу

Веб-приложение не может подключиться к серверу websocket

У меня есть веб-приложение, работающее на HTTP-сервере через порт 3000. Это приложение подключено к серверу веб-сокета через порт 9001. И WS, и HTTP-серверы расположены внутри одной виртуальной машины.

При тестировании приложения локально (внутри ВМ) все работает нормально. И веб-приложение, и сервер WS могут взаимодействовать друг с другом. И приложение, и сервер прослушивают соединение на localhost следующим образом:

Веб-приложение (ReactJS): const sock = new WebSocket('ws://localhost:9001/');

Сервер WS (Python): ws = WebsocketServer(host='127.0.0.1', port=9001)

При настройке для разрешения внешних подключений веб-приложение и сервер WS больше не могут взаимодействовать. Сервер по-прежнему прослушивает соединения на host='127.0.0.1'. Код внешнего интерфейса веб-приложения изменяется для подключения к машине, на которой работает виртуальная машина (скажем, 123.45.67.890):

Веб-приложение (ReactJS): const sock = new WebSocket('ws://123.45.67.890:9001/');

Я включил переадресацию портов для обоих портов 3000 и 9001 и отключил брандмауэр на обоих портах изнутри виртуальной машины. Оба порта открыты на хост-машине.

Я могу получить доступ к веб-приложению извне, используя 123.45.67.890:3000, поэтому я почти уверен, что соединение с виртуальной машиной открыто. Однако веб-приложение не взаимодействует с сервером WS через порт 9001. Есть идеи, что может быть причиной этого?

На всякий случай информация об ОС будет полезна:

Хост ВМ: Microsoft Windows 7 Enterprise (6.1.7601 Service Pack 1 Build 7601)

Гость ВМ: CentOS Linux release 7.4.1708 (Core)

Это было довольно легко исправить, и это даже написано в документации веб-сервер что я использую.

Просто необходимо создать экземпляр сервера WS следующим образом ws = WebsocketServer(host='0.0.0.0', port=9001) так что он прослушивает все входящие соединения.