如何检查通过 socket.io 库发送的消息是否已接收到客户端。在socket.io中有特殊的方法吗?
感谢您的回答!
定义事件处理程序时,应使用callback参数。
一个典型的实现如下:
客户端
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);
});
因此,您无需使用计时器。回调将立即运行,除非连接具有以下任何状态-“断开连接”,“正在重新连接”,“重新连接失败”。
问题内容: 向所有客户端发送消息效果很好,但是我想向特定的用户名发送消息。我的server.js文件看起来像。它的作用是在运行时,客户端代码将用户添加到对象用户名以及套接字对象中。并立即将单个消息返回给每个连接的客户端。 发出消息的部分 问题答案: 试试这个: socket.id由socket.io保存,并且包含客户端的唯一ID。您可以使用以下命令进行检查:
在socket.io中,如果要将消息发送到特定的房间,通常在服务器端使用特定的语法:。 但是客户机(我指的是在浏览器中运行的socket.io相关代码)如何指示消息应该发送到特定的房间? 还是socket.io客户端库也为此目的提供了特定的语法? 编辑:澄清一下,我上面的建议似乎起作用了,我只是不确定是否有更好的解决方案。
问题内容: 我从socket.io + node.js开始,我知道如何在本地发送消息和广播功能:-所有连接的客户端都收到相同的消息。 现在,我想知道如何向特定的客户端发送私人消息,我的意思是一个套接字,用于2个人之间的私人聊天(客户端到客户端流)。谢谢。 问题答案: 当用户连接时,它应使用唯一的用户名(例如电子邮件)向服务器发送消息。 一对用户名和套接字应存储在这样的对象中: 在客户端上,使用以下
问题内容: 我只能在用户的套接字ID直接存储在io.sockets.on(’connect’)函数中时向用户发出消息。我不知道为什么在登录后尝试存储其套接字ID时为什么不起作用。 加工: 无法运作: JavaScript客户端代码段 解决方案:感谢@alessioalex, 我不得不从登录页面中删除对socket.io的引用,并将以下内容添加到io.sockets.on(’connection’)
有些时候,一些发送的消息会在传输过程中不慎丢失(由于网络故障或者其他问题导致,或者由于他们是通过长连接轮询的方式存在与请求-响应循环列表中)。 这种情况下,你可能想要发送这样的一类消息,叫做易挥发消息(volatile message)。 服务器端 var io = require('socket.io')(80); io.on('connection', function (socket) {
问题内容: 我正在使用socket.io和node.js,直到现在看起来还不错,但我不知道如何从服务器向特定客户端发送消息,如下所示: 但是无论是还是方法似乎都无法满足我的需求。 我发现一种可能的解决方案是,该方法将不发送消息的SessionId数组作为第二个参数,因此我可以将此时连接了所有SessionId的数组传递给服务器,除了那个我希望发送邮件,但是我觉得必须有一个更好的解决方案。 有任何想