Я столкнулся с проблемой при использовании SockJS в определенной сети доступа. Думаю, это связано с тем, как SockJS выбирает лучший транспортный протокол (веб-сокет, долгий опрос,...) в зависимости от состояния сети.
Используя веб-браузер, мой клиент SockJS подключается с помощью транспортного протокола websocket к моему серверу SockJS узла. Я даже вижу событие «при подключении» на узле. Однако, когда я отправляю данные, через них ничего не проходит. Чтобы быть исчерпывающим, он отлично работает из некоторых других сетей доступа.
По результатам сайта http://websocketstest.com/ состояние этой сети доступа несколько особенное: для WebSockets (порт 80) он привязан к:
Connected Yes✔
Data Receive Yes✔
Чтобы убедиться, что веб-сокет работает хорошо, он также должен иметь строку «Время сервера», обновляемую каждую секунду тестовым сервером. Поскольку это не так, я почти уверен, что у меня есть прозрачный HTTP-прокси, который разрывает соединение через веб-сокет.
Однако SockJS этого не обнаруживает и не переключается на резервный протокол. Я думал, что это было разработано, чтобы сделать это.
Я ошибаюсь в отношении возможностей SockJS по согласованию транспорта?
Является ли Socket.IO
более надежным для такого сценария или для такого типа сетей доступа с прозрачными прокси-серверами HTTP?
Я знаю, что мог бы использовать SockJS с SSL, но я думаю, что это скорее запасной вариант, а не решение.