Всякий раз, когда я отсоединяюсь с помощью socket.disconnect();
, а затем повторно подключаюсь с помощью socket.connect();
, сервер дважды запускает мой код квитирования. Странная вещь, хотя код соединения с сервером работает дважды, после повторного подключения есть только одно соединение в моем массиве. Это происходит при случайном отключении, преднамеренном или даже при перезапуске сервера. Бит кода:Socket.IO: Reconnect вызывает код подключения к серверу для запуска дважды
io.on('connection', OnConnect);
function OnConnect(socket) {
var connection = { socket: socket, realIp: ip, token: GenerateConnToken() };
connections.push(connection);
console.log('Connected');
// Client will respond to this by emitting "client-send-info".
// This is emitted once on initial connect, but twice on reconnect.
socket.emit('acknowledge', connection.token);
socket.on('client-send-info', function() {
console.log('Client Sent Info');
});
socket.on('disconnect', function() {
console.log('Disconnected');
});
}
Приведенный выше код, когда клиент подключается, разъединяет, а затем воссоединяет один раз, будет производить следующий лог:
Connected
Клиент Направлено Info
Отсоединение
Подключено
Клиент Направлено Info
Клиент Направлено Информация
Почему, при повторном подключении, код подключения будет работать в два раза, но создать только один объект подключения?
EDIT: при дальнейшем осмотре кажется, что другой код моего соединения выполняется дважды, когда клиент повторно подключается. Вышеприведенный код обновляется для отражения соответствующей информации.
Спасибо, это действительно помогло прояснить беспорядок в моей голове. – udjat
Я думаю, что эта проблема происходит на сервере. какое-либо решение на сервере, и как сервер может знать, что происходит повторное подключение? – Xin