2016-07-06 3 views
0

У меня действительно странная проблема, возникающая здесь в разработке socket.io.socket.io io.sockets.adapter.rooms [номер] в 3G не работает

Все работает нормально (выдает в/из сервера), за исключением, что от соединения 3G сервер выполняет следующие функции:

console.log(io.sockets.adapter.rooms['thisroom']) 

Эта линия, почти каждый раз, возвращает TYPEOF из «неопределенными», как если бы там, где не были сокеты, соединенные в данной комнате этого помещения, когда на самом деле есть сокеты, соединенные с комнатой.

Если же код выполняется через соединение Wi-Fi, при тех же обстоятельствах, с теми же гнездах, соединенных, выше строка возвращает что-то вроде:

номер {сокеты: { «/ # wEkHFuAhbCEf1Dw2AAAC»: true}, длина: 1}

который является правильным.

Я пробовал все с этим, чтобы:

Пробовал socket.io версия 1.3.7

Пробовал socket.io версия 1.4.8

Пытались связаться с

var socket = io.connect("http://<ip>:8081"); 

Пробовал накладывать на порты только транспорт:

var socket = io.connect("http://<ip>:8081", {transports: ['websocket']}); 

Пытались использовать два транспорта, как:

var socket = io.connect("http://<ip>:8081", {transports: ['websocket', 'polling']}); 

Ничего не работало.

Это действительно странно, потому что иногда подключение 3G работает так, как ожидалось, только при перезапуске приложения. Но большую часть времени он работает.

Идеи?

+1

Иногда 3G запускает реализацию websocket с дорожек, пытаясь «исправить» запросы «http» ... пытались ли вы использовать TLS, чтобы предотвратить впрыскивание данных третьей стороной (даже хорошо продуманное, оно все еще вызывает проблемы)? – Myst

+0

Вы уверены, что сеть 3G имеет доступ к вашему IP-адресу и порту? Помните, что сетевое соединение 3G будет поступать извне вашего брандмауэра, но сетевое подключение WiFi будет поступать из вашего брандмауэра/маршрутизатора. – jfriend00

+0

Проделали ли вы какую-либо отладку на стороне клиента, чтобы убедиться, что клиент считает, что он подключен? И, как насчет регистрации сервера входящих соединений и создания комнат? Что вы видите как на клиенте, так и на сервере из сети 3G? – jfriend00

ответ

0

Мне просто удалось заставить его работать, используя защищенное соединение с SSL. В разделе SSL, io.sockets.adapter.rooms ['thisroom'] работает каждый раз в любом 3G-соединении.