如何向具有 socket.io 的特定客户端发送消息
2022-08-30 05:18:36
我从 socket.io +节点开始.js,我知道如何在本地发送消息并广播功能:- 所有连接的客户端都会收到相同的消息。socket.broadcast.emit()
现在,我想知道如何向特定客户端发送私人消息,我的意思是一个用于2人之间私人聊天的套接字(客户端到客户端流)。谢谢。
我从 socket.io +节点开始.js,我知道如何在本地发送消息并广播功能:- 所有连接的客户端都会收到相同的消息。socket.broadcast.emit()
现在,我想知道如何向特定客户端发送私人消息,我的意思是一个用于2人之间私人聊天的套接字(客户端到客户端流)。谢谢。
您可以使用 socket.io 房间。从客户端发出一个具有任何唯一标识符(电子邮件,id)的事件(在本例中为“join”,可以是任何内容)。
客户端:
var socket = io.connect('http://localhost');
socket.emit('join', {email: user1@example.com});
现在,从服务器端使用该信息为该用户创建一个独特的房间。
服务器端:
var io = require('socket.io').listen(80);
io.sockets.on('connection', function (socket) {
socket.on('join', function (data) {
socket.join(data.email); // We are using room of socket io
});
});
因此,现在每个用户都加入了以用户的电子邮件命名的房间。因此,如果您想向特定用户发送消息,则只需
服务器端:
io.sockets.in('user1@example.com').emit('new_msg', {msg: 'hello'});
客户端要做的最后一件事是侦听“new_msg”事件。
客户端:
socket.on("new_msg", function(data) {
alert(data.msg);
}
我希望你明白这个想法。
当用户连接时,它应该使用必须唯一的用户名向服务器发送一条消息,例如电子邮件。
一对用户名和密码应存储在如下对象中:
var users = {
'userA@example.com': [socket object],
'userB@example.com': [socket object],
'userC@example.com': [socket object]
}
在客户端上,向服务器发出一个包含以下数据的对象:
{
to:[the other receiver's username as a string],
from:[the person who sent the message as string],
message:[the message to be sent as string]
}
在服务器上,侦听消息。收到消息后,将数据发送到接收方。
users[data.to].emit('receivedMessage', data)
在客户端上,侦听来自服务器“已接收消息”的发出消息,通过读取数据,您可以处理它来自谁以及发送的消息。