Следующий код у меня не работает:
socket = io.connect ('http://host.com:8081'); socket.disconnect (); socket = io.connect ('http://host.com:8081');
Это обходной путь, который я нашел:
socket = io.connect ('http://host.com:8081'); socket.disconnect (); удалить io.sockets [' http://host.com : 8081']; io.j = []; socket = io.connect ('http://host.com:8081');
Такая же проблема здесь - не удалось подключить-отключить-повторно подключить, как вы описали.
Однако я обнаружил, что работает следующее. Как ни странно, если вы опустите setTimeout и сразу же повторно подключитесь (или после слишком короткого тайм-аута), вы немедленно отключитесь.
var ns = io.connect(
'/',
{ reconnect: false }
),
numDisconnects = 2;
ns.on('connect', function () {
console.log('Connected');
if (numDisconnects > 0) {
console.log('Disconnecting');
ns.socket.disconnect();
setTimeout(function () {
console.log('Reconnecting');
ns.socket.connect();
}, 5000);
}
numDisconnects--;
});
ns.on('disconnect', function () {
console.log('Disconnected');
});
socket = io.connect (хост);
socket.disconnect ();
socket.socket.reconnect (); || socket.socket.connect (хост);
работает, но поскольку повторное подключение или второе отключение подключения срабатывает каждые пару секунд
У меня была такая же проблема, поэтому я не смог вовремя завершить запись нокаута из-за этой ошибки :(
Пожалуйста, исправьте это до того, как сердце разбьется!
Ни один из вышеперечисленных обходных путей у меня не помог. Ребята, это серьезная выставочная пробка. Почему метка «Невозможно воспроизвести»? Мой тестовый env. последняя версия Chrome для OS X 10.6.
Я наблюдаю то же самое. Также повторный вызов io.connect()
завершается неудачно без ошибок. Кто-нибудь нашел обходной путь?
Используйте этот: io.connect(null,{'force new connection':true});
Как удобно и некрасиво. Как насчет удаления io.sockets[uuri] = socket;
из io.js:196
? В чем смысл этой изюминки?
К сожалению, здесь такая же проблема. Вы не можете повторно подключиться после отключения.
Единственное, что у меня сработало после отключения:
io.j = [];
io.sockets = [];
Изменить: это не только одна проблема с отключением на стороне клиента (). Он не очищает структуры данных при отключении - вы можете видеть, что SocketNamespace. $ Events по-прежнему имеет все обратные вызовы для закрытых подключений и т. Д.
@MrJoes Используйте io.connect(null,{'force new connection':true});
Хорошо, это действительно последний API для переподключения? Довольно странно.
@skrat Я с тобой согласен. должен быть io.reconnect
API.
Я так не думаю, io.connect
затем io.disconnect
затем io.connect
должны работать, как и ожидалось.
@milani : и утечка памяти из-за того, что потерянные сокеты, обработчики событий и т. д. остаются в io.sockets []?
Не очень хорошая идея, если честно.
@MrJoes Вы уверены, что насчет утечки памяти? @ 3rd-Eden из io.socket сказал мне использовать этот API.
Неважно, он не добавит сокет в io.sockets [], если вы передадите «принудительно новое соединение».
Хотя это немного некрасиво, особенно с конечными точками, потому что вы теряете мультиплексирование - он полагается на сокет в io.sockets для мультиплексирования.
Предложение @Gorokhov использовать повторное подключение через прототип сокета сработало для меня:
socket.socket.reconnect ()
Спасибо
Здесь та же проблема - socket.reconnect () у меня не работает, я попробую несколько других обходных путей. Это разочаровывает, ведь это довольно простая функциональность, которую нужно сломать в обновлении. Я уверен, что многие приложения не могут легко обновляться из-за этого.
Если разработчикам потребуется помощь в воспроизведении проблемы, я буду рад помочь - я удивлен, увидев тег «невозможно воспроизвести» на этой ошибке.
Похоже, что скоро будет крупное обновление из-за этого запроса на перенос :
@cacois Попробуйте использовать socket.socket.reconnect () вместо socket.reconnect ()
ах, отличные новости :-)
@ wackfordjf3 Привет, спасибо, хороший звонок. Работает сейчас. :)
По-прежнему возникают проблемы с повторным подключением.
2-е повторное подключение вызывает запуск нескольких событий повторного подключения на сервере. (и это умножается с каждым последующим повторным подключением). Запускаю переподключения к пространству имен.
socket = io.connect (url {'reconnect': false}); socket.disconnect; // 1-е отключение
socket.socket.reconnect (); socket.disconnect (); сокет. // 2-е отключение
socket.socket.reconnect (); // 2-е переподключение
Включен: розетка. [email protected]
В дополнение к этому:
Уродливый способ отлично работает:
удалить io.sockets [url]; io.j = [];
socket = io.connect (url);
Столкнитесь с тем же, что и у людей здесь; даже странно в сценарии пространства имен. Отбросьте решение для пространств имен:
var base = ' http: // localhost : 3000'
, канал = '/ чат'
, url = база + канал;
var socket = io.connect (url);
// вызов socket.disconnect () не отключится, поэтому:
io.sockets [база] .disconnect ();
// переподключить синтаксис.
удалить io.sockets [base]; io.j = [];
socket = io.connect (url);
примечание: версия socket.io - 0.9.0, платформа: windows 7 home premium
провел полдень, борясь с модульными тестами, время ожидания которых истекало из-за того, что я не мог подключиться после отключения. {'force new connection': true} устранил проблему. спасибо @milani
Та же проблема здесь с использованием Cucumber.js. Поскольку мне нужно создавать и уничтожать объекты, я столкнулся с одним и тем же подключением, отключением, сбой подключения. Спасибо @milani и @rawberg
Меня устраивает! Спасибо @mrjoes.
Спасибо @milani
Параметр «Принудительное новое соединение» теперь называется «forceNew» в версии 1.0 для тех, кто мог снова столкнуться с этой проблемой.
Я нажал на коммит, чтобы добавить к нему BC, так что скоро ни у кого больше не должно быть этой проблемы!
у меня это сработало, socket = io.connect (socketUrl, {'forceNew': true});
forceNew отключает всю систему мультиплексирования пространства имен, это действительно решение?
Я использую:
сокет = io.connect ()
...
// ЭТО
socket.io.reconnect ()
..
Client.prototype.connect = function() {
if (!this.connection) {
this.connection = this.socket.connect(config.host + ':' + config.port);
}
else {
if (!this.connection.connected) {
this.connection.connect();
}
}
};
io.connect (null, {'принудительно установить новое соединение': true});
это решит мою проблему, спасибо господин. Milami
Самый полезный комментарий
Используйте этот:
io.connect(null,{'force new connection':true});