socket.emit()的范围是什么?

时间:2017-12-28 05:23:07

标签: javascript node.js socket.io chatbot

我们正在使用Socket.IO进行聊天应用。谁将收到通过socket.emit()发送的邮件?超过here时,socket.emit()只会向一个客户发送消息。

我们的要求是实现一对一通信(用户和服务器之间,而不是两个用户之间)。目前,我们正在为不同的用户创建单独的会议室,并使用io.in(room).emit()发送消息。这些消息将发送给该​​房间的每个人,根据我们的申请,一个房间只有一个用户。

我们可以通过创建单个会议室并设法回复特定客户端来使用socket.emit()来实现相同目标吗?

更新: -

有关更多说明,请参阅此方案。

五个不同的用户打开聊天框,每个人都向服务器提出不同的问题。我们创建了五个不同的房间(一个用户),并使用io.in(room).emit()回复用户。

所以,实际上我们在这里做的是,在服务器端,我们根据他所在的房间识别用户。这里有更好的方法吗?听到socket.emit()只会回复一位客户,并想知道这是否会缓解我们的问题。

1 个答案:

答案 0 :(得分:1)

根据您的要求,用户仅将数据发送到服务器。您可以在客户端使用emit事件,使用相同的方法在服务器中使用事件。

<强>客户端

客户发布方法

socket.emit('DataClientToServer',{data : 'hello'});

客户 on 方法,从服务器获取数据

socket.on('DataServerToClient',function(data){
            console.log(data);
        });

服务器

服务器 on 方法,仅使用 socket.id

获取该数据并将数据发送到该客户端
socket.on('DataClientToServer', (data) => {
            console.log(data);
            //Send data to that client only using socket.id
            io.to(socket.id).emit('DataServerToClient',{data : 'Server to Client'});
        });

要检测哪个用户发送数据,您需要发送额外数据,例如用户唯一用户名用户ID objectid 等。

每个用户都不需要空间。

希望这对你有所帮助。