如何确保通过socket.io消息已被接收到客户端?(How to be sure that mes

2019-06-26 03:18发布

如何检查与socket.io库已接收到客户端发送该消息。 是否有socket.io它特殊的方法?

谢谢您的回答!

Answer 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”。 这就是确认消息。

更新

一个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);
});

所以,你不需要使用定时器。 回调立即运行,除非该连接具有以下任何一种状态的 - “断开”,“重新连接”,“reconnect_failed”。



Answer 2:

您可以使用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});
});


Answer 3:

当您添加功能的最后一个参数.send().emit()方法调用,当对方收到消息调用此函数。

socket.send('hi', function() {
    // if we are here, our salutation has been received by the other party.
});


文章来源: How to be sure that message via socket.io has been received to the client?