WebSockets, работает только на localhost?

Доброго время суток, %username%.



Дано:

Демон на php, обрабатывающий запросы и клиент, расположенные на одной машине.

Демон использует все возможные подключения на порту 8081 (Socket bind successfully on 0.0.0.0:8081.).



Вариант 1:

Клиент использует локальный адрес для подключения (ws://localhost:8081/).



Результат:

Handshake происходит, на клиенте вызывается событие onopen. Все последующие запросы как от клиента, так и от сервера выполняются в штатном режиме.



Вариант 2:

Клиент использует внешний адрес для подключения (ws://176.х.х.х:8081/).



Результат:

Handshake происходит, на клиенте вызывается событие onopen. Больше ни одного запроса ни сервер, ни клиент не получают.



Бьюсь уже второй день, мысли кончились…
  • Вопрос задан
  • 4280 просмотров
Решения вопроса 1
Skpd
@Skpd Автор вопроса
Всем спасибо, вопрос снят =) Дело было в не верном расчете payload length.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 4
iStyx
@iStyx
Ну покажите код, что ли. А то как-то все это эфемерно.
Ответ написан
iStyx
@iStyx
Клиент точно передает хэдер Origin?
Ответ написан
Skpd
@Skpd Автор вопроса
Заголовки от клиента:

GET / HTTP/1.1
Upgrade: websocket
Connection: Upgrade
Host: 176.х.х.х:8081
Origin: 176.х.х.х
Sec-WebSocket-Key: aUOMe5Zs+5lnPNjAiPp/Kw==
Sec-WebSocket-Version: 13
Cookie: PHPSESSID=5226a026e3626569bba468bc27bc3bab


Ответ от сервера:

HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: /NYJ3OVdOzEkA62igWeFGHmVwR4=
Sec-WebSocket-Version: 13
Origin: 176.х.х.х:8081
Host: 176.х.х.х
Ответ написан
Комментировать
Попробуйте вырубить брандмауэр
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы