javascript - 如何确保通过 socket.io 的消息已收到客户端?

标签 javascript node.js websocket 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”。接下来检查客户端的控制台。它应该显示“确定”。这是确认信息。

更新

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'。

关于javascript - 如何确保通过 socket.io 的消息已收到客户端?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11382495/

相关文章:

ruby-on-rails - Rails 5 Actioncable 没有 channel 的全局消息

rest - 我如何告诉我的前端后台作业已使用 Web 套接字完成?

c# - javascript切换背景图片

Javascript 重复音频

javascript - 如果有多个复选框切换事件

node.js - 如何使用jquery或angularjs在jade模板中创建弹出窗口

javascript - TypeError : require(. ..) 不是 Express.js 的函数

javascript - 为什么我收到 "Cannot find module ' jsonLogic'"错误?

c# - Asp.net Core Websocket 与 linux/docker 兼容吗?

javascript - 当从 javascript 调用字符串时,Latex 不渲染?