我从socket.io + node.js开始,我知道如何在本地发送消息和广播socket.broadcast.emit()
功能:-所有连接的客户端都收到相同的消息。
现在,我想知道如何向特定客户端发送私人消息,我的意思是一个套接字,用于2个人之间的私人聊天(客户端到客户端流)。谢谢。
我从socket.io + node.js开始,我知道如何在本地发送消息和广播socket.broadcast.emit()
功能:-所有连接的客户端都收到相同的消息。
现在,我想知道如何向特定客户端发送私人消息,我的意思是一个套接字,用于2个人之间的私人聊天(客户端到客户端流)。谢谢。
Answers:
当用户连接时,它应使用唯一的用户名(例如电子邮件)向服务器发送消息。
一对用户名和套接字应存储在这样的对象中:
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)
在客户端上,侦听来自服务器的名为“ receivedMessage”的发射,通过读取数据,您可以处理其来源和发送的消息。
您可以使用socket.io房间。从客户端发出带有任何唯一标识符(电子邮件,ID)的事件(在这种情况下,“加入”可以是任何东西)。
客户端:
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);
}
希望您能明白。
socket.io-redis
。
{email: user1@example.com}
所有连接都与众不同?不会去应用程序的所有客户端都具有用户user1@example.com
了,我如何使它成为user2@example.com
连接的第二个客户端的用户,因此我可以拥有不同的房间。抱歉,如果这是一个令人讨厌的问题。
当然: 简单地说,
这就是您需要的:
io.to(socket.id).emit("event", data);
每当用户加入服务器时,都会生成套接字详细信息,包括ID。这是ID确实有助于向特定人员发送消息。
首先,我们需要将所有socket.ids存储在数组中,
var people={};
people[name] = socket.id;
这里的名字是接收者的名字。例:
people["ccccc"]=2387423cjhgfwerwer23;
因此,现在我们在发送消息时都可以使用接收者名称获取该socket.id:
为此,我们需要知道接收方名称。您需要向服务器发送接收方名称。
最后一件事是:
socket.on('chat message', function(data){
io.to(people[data.receiver]).emit('chat message', data.msg);
});
希望这对您有效。
祝好运!!
您可以参考socket.io 房间。握手套接字时-您可以将他加入命名的房间,例如“ user。#{userid}”。
之后,您可以通过方便的名称向任何客户端发送私人消息,例如:
io.sockets.in('user.125')。emit('new_message',{text:“ Hello world”})
在上面的操作中,我们将“ new_message”发送给用户“ 125”。
谢谢。
让我通过socket.io房间使其更简单。请求具有唯一标识符的服务器加入服务器。在这里,我们使用电子邮件作为唯一标识符。
客户端Socket.io
socket.on('connect', function () {
socket.emit('join', {email: user@example.com});
});
用户加入服务器后,为该用户创建一个房间
服务器Socket.io
io.on('connection', function (socket) {
socket.on('join', function (data) {
socket.join(data.email);
});
});
现在我们都准备加入。让我们从服务器to
机房发出一些声音,以便用户可以收听。
服务器Socket.io
io.to('user@example.com').emit('message', {msg: 'hello world.'});
让我们通过侦听message
客户端的事件来最终确定主题
socket.on("message", function(data) {
alert(data.msg);
});
Socket.io房间的参考