WebSockets через соединение 3G - PullRequest
37 голосов
/ 06 апреля 2011

Я играл с Socket.io, node.js и WebSockets, все из которых я могу нормально работать через соединение Wi-Fi.

Однако, когда я тестирую приложение с поддержкой WebSocket поверх3G-соединение (на моем iPhone, например), тогда кажется, что возврат к длинному опросу - это единственное работоспособное решение.

С Socket.io соединение завершается с ошибкой «Соединение WebSocket недействительно или источник не проверен» ранеевозвращаясь к долгим опросам.

Я не знаю, предназначены ли WebSockets для работы через 3G - кто-нибудь добился успеха, заставив их так работать?Я испробовал несколько различных методов, и все, похоже, не сработали, что заставляет меня думать, что я пытаюсь сделать невозможное.

Ответы [ 4 ]

31 голосов
/ 06 апреля 2011

Известно, что некоторые операторы мобильной связи устанавливают совершенно сломанные прозрачные прокси, через которые вы вынуждены проходить.Это настоящее раздражение, с которым рабочей группе WebSocket приходилось иметь дело с самого начала.Протокол предназначен для обеспечения того, что он будет очень быстро выходить из строя в присутствии таких продуктов, так что ваше приложение может немедленно вернуться к другим методам.Если вы обнаружите, что обнаружение аномалии и ее устранение занимает много времени, сообщите об этом рабочей группе hybi в IETF, чтобы можно было диагностировать и устранить проблему.

Параллельно вы можете связаться сВаш оператор мобильной связи и спросите их, как вы можете получить доступ к сети без прохождения через их сломанные прозрачные прокси или, по крайней мере, узнать, когда они ожидают, что их сломанные прокси будут исправлены для поддержки HTTP в соответствии со спецификациями.Некоторые из них могут предлагать вам несколько вариантов доступа.

11 голосов
/ 11 ноября 2011

Как говорит Вилли Тарро, это сломанные прозрачные прокси, используемые мобильными операторами.Я уверен, что это не эксклюзивно для них (корпоративные брандмауэры компании, например).Вы можете обойти это, используя другой номер порта (по крайней мере, у мобильных операторов).Нечто иное, чем порт 80. Использование SSL также может работать, но я еще не пробовал.

Тогда у вас возникнут проблемы с людьми за брандмауэрами, блокирующими все за пределами портов 80 и 443.

Напишите ваше приложение websockets для переключения между портом 80 и каким-либо другим портом при каждой попытке подключения, и пусть ваш хост прослушивает эти два порта.Тогда у вас есть хороший шанс подключения к серверу.Используйте порт iptables REDIRECT, если вы используете linux для одновременного прослушивания двух портов.

9 голосов
/ 15 декабря 2013

Вы можете использовать Отправленные сервером события протокол вместо WebSockets.

SSE является более простым, HTTP-совместимым и может проходить через прокси.

4 голосов
/ 28 октября 2013

Были те же ошибки с плохим подключением через веб-сокет в определенных мобильных сетях. Решил их;

  1. Перемещение портов: перемещение через сервер и клиент веб-сокета через порт SSL (порт 443)

  2. Ping keep-alive: отправка периодических сообщений ping с клиента на сервер каждые X секунд и ожидание возврата pong с сервера. Если сервер не вернул pong в течение Y секунд, перезапустите соединение на клиенте.

Реализация (1) поможет вам в этом.

...