Socket.io-client: Подключить -> Отключить -> Подключиться не работает

Созданный на 23 июл. 2011  ·  33Комментарии  ·  Источник: socketio/socket.io-client

Следующий код у меня не работает:
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');

Unable to reproduce bug

Самый полезный комментарий

Используйте этот: io.connect(null,{'force new connection':true});

Все 33 Комментарий

Такая же проблема здесь - не удалось подключить-отключить-повторно подключить, как вы описали.

Однако я обнаружил, что работает следующее. Как ни странно, если вы опустите 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

Была ли эта страница полезной?
0 / 5 - 0 рейтинги