我们正在使用Socket.IO进行聊天应用。谁将收到通过socket.emit()
发送的邮件?超过here时,socket.emit()
只会向一个客户发送消息。
我们的要求是实现一对一通信(用户和服务器之间,而不是两个用户之间)。目前,我们正在为不同的用户创建单独的会议室,并使用io.in(room).emit()
发送消息。这些消息将发送给该房间的每个人,根据我们的申请,一个房间只有一个用户。
我们可以通过创建单个会议室并设法回复特定客户端来使用socket.emit()
来实现相同目标吗?
更新: -
有关更多说明,请参阅此方案。
五个不同的用户打开聊天框,每个人都向服务器提出不同的问题。我们创建了五个不同的房间(一个用户),并使用io.in(room).emit()
回复用户。
所以,实际上我们在这里做的是,在服务器端,我们根据他所在的房间识别用户。这里有更好的方法吗?听到socket.emit()
只会回复一位客户,并想知道这是否会缓解我们的问题。
答案 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 等。
每个用户都不需要空间。
希望这对你有所帮助。