Ответ 1
Вы должны использовать параметр обратного вызова при определении обработчика событий.
Типичная реализация будет следующей:
Клиентская сторона
var socket = io.connect('http://localhost');
socket.emit('set', 'is_it_ok', function (response) {
console.log(response);
});
Серверная сторона
io.sockets.on('connection', function (socket) {
socket.on('set', function (status, callback) {
console.log(status);
callback('ok');
});
});
Теперь проверьте консоль на стороне сервера. Он должен отображать 'is_it_ok'. Следующая консоль проверки на стороне клиента. Он должен отображать "ok". Это сообщение подтверждения.
Update
Соединение socket.io является по существу постоянным. Следующие встроенные функции позволяют вам действовать в зависимости от состояния соединения.
socket.on('disconnect', function() {} ); // wait for reconnect
socket.on('reconnect', function() {} ); // connection restored
socket.on('reconnecting', function(nextRetry) {} ); //trying to reconnect
socket.on('reconnect_failed', function() { console.log("Reconnect failed"); });
Использование опции обратного вызова, показанной выше, представляет собой комбинацию следующих двух шагов:
socket.emit('callback', 'ok') // happens immediately
и на стороне клиента
socket.on('callback', function(data) {
console.log(data);
});
Поэтому вам не нужно использовать таймер. Обратный вызов выполняется немедленно, за исключением случаев, когда соединение имеет одно из следующих состояний: "отключить", "повторно подключить", "повторно подключить".