Как проверить, что сообщение, отправленное с помощью библиотеки socket.io, было получено клиенту. Есть ли специальный метод для него в socket.io?
Спасибо за ваши ответы!
Как проверить, что сообщение, отправленное с помощью библиотеки socket.io, было получено клиенту. Есть ли специальный метод для него в socket.io?
Спасибо за ваши ответы!
Вы должны использовать параметр обратного вызова при определении обработчика событий.
Типичная реализация будет следующей:
Клиентская сторона
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". Это сообщение подтверждения.
Соединение 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);
});
Поэтому вам не нужно использовать таймер. Обратный вызов выполняется немедленно, за исключением случаев, когда соединение имеет одно из следующих состояний: "отключить", "повторно подключить", "повторно подключить".
Вы можете использовать подтверждения socket.io.
Цитата из документации socket.io:
Иногда вам может потребоваться обратный вызов, когда клиент подтвердит прием сообщения.
Для этого просто передайте функцию как последний параметр
.send
или.emit
. Что еще, когда вы используете.emit
, подтверждение сделанные вами, что означает, что вы также можете передавать данные.
На стороне клиента просто выпустите событие с вашими данными, функция будет вызываться всякий раз, когда сервер отвечает на ваше событие:
client.emit("someEvent", {property:value}, function (data) {
if (data.error)
console.log('Something went wrong on the server');
if (data.ok)
console.log('Event was processed successfully');
});
На стороне сервера вы вызываетесь с данными и обработчиком обратного вызова для отправки ответа:
socket.on('someEvent', function (data, callback) {
// do some work with the data
if (err) {
callback({error:'someErrorCode', msg:'Some message'});
return;
}
callback({ok:true});
});
Когда вы добавляете функцию в качестве последнего параметра вызовов методов .send()
или .emit()
, эта функция вызывается, когда другая сторона получает сообщение.
socket.send('hi', function() {
// if we are here, our salutation has been received by the other party.
});