如何检查使用 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);
});
所以你不需要使用定时器。回调函数会立即执行,除非连接处于以下状态之一- 'disconnect'、'reconnecting'、'reconnect_failed'。
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.
});
send
一起使用时自动调用;当使用 emit
时,接收端必须手动调用它。 - Michelle Tilley