2013-10-03 2 views
0

Я использую socket.io с последней версией node.js и socket.io показывает любопытное поведение: Событие connect срабатывает на стороне клиента, но не на сервере стороны в первый раз. После перезагрузки или просто загрузки страницы снова событие было запущено как на стороне клиента, так и на стороне сервера правильно. Что случилось (с моим кодом?)?Socket.io запускает событие сразу после второго подключения

// Client 
var socket = io.connect(window.location.protocol + '//' + window.location.hostname, { 
    'sync disconnect on unload': true 
}); 

socket.on('connect', function() { 
    alert("Connect"); 
    // Do other stuff 
}); 

-

// Server 
io.sockets.on('connection', function(socket) { 
    console.log("connection"); 

    io.sockets.on('connect', function(socket) { 
     console.log("connect"); 
    }); 
}); 

работы сервера и загрузки страницы: Клиент запускает предупреждение, сервер просто регистрирует connection. Теперь загружая страницу снова, она регистрирует как connection, так и connect.

Обновление: Похоже, что в самом первом соединении возникают такие проблемы, после чего он работает везде, как ожидалось. Сразу после запуска каждого сервера узлов (re) это поведение появляется. Примечание: сам узел предоставляет страницу, на которой используется socket.io, и которая работает даже при первом запросе, поэтому исключить проблему узла. Браузер также не имеет значения, он одинаковый в каждом браузере.

ответ

0

Для Socket.IO, connection является эквивалентом на стороне сервера connect со стороны клиента. Поэтому, когда вы находитесь в обратном вызове для события connection, сокет уже установил соединение, и вам не нужно прослушивать какое-либо другое событие. Я не уверен, что connect на стороне сервера, но он не документирован и не работает.

// on the server 
io.sockets.on('connection', function(socket) { 
    // this connection has already been established 
    // no other handler is required 
}); 

// on the client 
var socket = io.connect(); 
socket.on('connect', function() { 
    // the connection has been established 
}); 
Смежные вопросы