Angularjs Socket.IO-向特定用户发送消息

Angularjs Socket.IO-向特定用户发送消息,angularjs,express,mongoose,socket.io,Angularjs,Express,Mongoose,Socket.io,假设我在MongoDB中有以下模式: var postSchema = new mongoose.Schema({ owner: { type: mongoose.Schema.Types.ObjectId, ref: 'User', required: true }, contributors: [{ type: mongoose.Schema.Types.ObjectId, ref: 'User' }] }); 每个帖子必须有一个所有者,并且可能有许多贡献者(由所有者添加) 当所有

假设我在MongoDB中有以下模式:

var postSchema = new mongoose.Schema({
  owner: { type: mongoose.Schema.Types.ObjectId, ref: 'User', required: true },
  contributors: [{ type: mongoose.Schema.Types.ObjectId, ref: 'User' }]
});
每个帖子必须有一个所有者,并且可能有许多贡献者(由所有者添加)

当所有者或任何参与者对post对象进行更改时,我需要实时(使用Socket.IO)将该更改通知所有相关用户


但是我对怎么做有些怀疑。。。我的意思是,我知道Socket.IO有一些方法可以向特定用户发送消息,但我们需要知道SocketID。如何将UserID与SocketID关联?我是否可以将其添加为属性,然后遍历所有套接字以找到具有所需用户标识的套接字?但是,如果我们有许多套接字连接到服务器,这不会花费太多时间吗?

如果您支持来自一个用户的多个连接,通常您会使用格式为
{id:socket}
{id:[sockets]}
的hashmap(即JavaScript中的对象)

比如说

var sockets = {};
现在,当建立了连接并且您有了一个
socket
对象时,您可以对您的用户进行身份验证,只需执行以下操作即可

sockets[id] = socket;
sockets[id].emit(...);
一旦你有了一条你想用
id
发送给用户的消息,你只需这样做

sockets[id] = socket;
sockets[id].emit(...);
您必须记住的一件事是,一旦断开连接,就从
sockets
对象中删除套接字,否则将导致内存泄漏

所有这些都假设您只处理一个实时服务器。如果您处理的是分布式环境,那么复杂性会非常高,但我想这不是您目前的问题。

当然:很简单

这就是您需要的:

  io.to(socket.id).emit("event", data);
每当用户加入服务器时,都会生成套接字详细信息,包括ID。这个ID确实有助于向特定的人发送消息

首先我们需要在数组中存储所有socket.id

 var people={};

 people[name] =  socket.id;
这里的名字是接受者的名字。例如:

 people["ccccc"]=2387423cjhgfwerwer23;
现在,无论何时发送消息,我们都可以获得带有接收者名称的socket.id:

为此,我们需要知道接收者名称。您需要向服务器发送接收者名称

最后一件事是:

 socket.on('chat message', function(data){
 io.to(people[data.reciever]).emit('chat message', data.msg);
 });

希望这对你有好处。!!祝你好运

谢谢你:D我从没想到它会这么简单!是的,你是对的。。。我只处理一个实时服务器!