发送/发送到socket.io没有任何数据?

时间:2016-12-19 13:23:39

标签: node.js sockets socket.io

是否可以在没有任何数据的情况下向节点js发送事件? 这就是我想要做的事情:

客户端:

socket.emit('logged out');

服务器:

socket.on('logged out', function() {
    console.log('User is logged out');
    delUser();
    sendUsersOnline();
});

客户端正在运行,但我从来没有让服务器端被解雇。我不知道为什么。可能是因为我没有发送任何数据?

编辑:

function delUser()
{
    for(i in usersOnline) {
        var user = usersOnline[i];
        if(user.socket_id == socket.id) {
            delete usersOnline[i];
            usersTyping.splice(usersTyping.indexOf(myUser.id), 1);
            console.log('Disconnected: ' + myUser.display_name + '(' + myUser.id + ')');
        }
    }
}

function sendUsersOnline()
{
    io.emit('users online', usersOnline);
}

1 个答案:

答案 0 :(得分:0)

根据Socket.io 2.0.3 docs

  

socket.emit(eventName [,... args] [,ack])

socket.emit('hello', 'world');
socket.emit('with-binary', 1, '2', { 3:'4', 5: new Buffer(6) });
  

将事件发送到由字符串名称标识的套接字。任何其他   参数可以包括在内。所有可序列化的数据结构都是   支持,包括缓冲区。

     

ack参数是可选的,将与服务器一起调用   答案。

它表示可以包含任何其他参数,但不一定。所以你绝对可以发送/发出一个没有来自服务器/客户端的任何数据的事件,比如这个

socket.emit('logged out');

你可以接收任何没有像这样的服务器/客户端上的数据的事件

socket.on('logged out', function(){
// Code to execute in response to this event
});

我最近使用这种类型的事件来发送来自点对点的信号而没有任何数据与它一起发送它并且它完美地工作。基本上,一个对等体(客户端)向服务器发送信号,而不是服务器获取该信号,并使用广播将该信号发送给其他对等体(客户端)。