如何确保客户端已收到通过socket.io发送的消息
How to be sure that message via socket.io has been received to the client?
如何检查使用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"。
您可以使用socket.io的确认。
socket.io文档中的报价:
有时,您可能希望在客户端确认时得到回调消息接收。
为此,只需传递一个函数作为
.send
的最后一个参数,或CCD_ 2。更重要的是,当您使用.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.
});
相关文章:
- 如何使用Socket.io将命令从客户端发送到服务器
- Socket.IO未定义变量
- Socket.io on Mozilla Rhino
- socket.io发射三次
- AngularJS$q承诺使用socket.io
- 如何知道使用socket.io订阅/取消订阅频道
- 通过socket.io发射给特定的人
- 通过socket.io从浏览器流式传输视频
- 通过node.js和socket.io向特定用户发送数据
- 如何使用socket.io在meanjs项目中配置jshint
- 如何使用Socket.io和Node.js开发大型聊天应用程序
- RangeError nodejs socket.io
- 通过node.js和socket.io在两个用户之间发送消息
- 使用socket.io更新express实时视图
- socket.io cookie解析握手错误
- 如何在同一端口上使用ExpressJS和Socket.io
- 使用cordova快速nodejs socket.io
- 通过socket.io与heroku应用程序进行通信
- Socket.io客户端在使用名称空间时忽略端口[Bug?]
- Node.js-socket.io-对io.sockets的引用突然未定义