如何在特定事件发生后通过socket.io向特定登录用户发送消息?

时间:2015-11-16 04:02:21

标签: node.js mongodb socket.io

我向socket.io迈出了一步。没有req就很难编码,因为我不知道对谁做出回应。

对于这个问题。我的网站有一些博客。博客更新后,我需要告诉'跟踪博客已更新博客的用户。问题是我不知道巫婆跟着用户是否在线,我不知道如何只跟随用户ID向他们发送事件。

有人可以给我一些提示吗?无需任何特定代码。

2 个答案:

答案 0 :(得分:2)

您可以致电join订阅套接字到指定频道:

io.on('connection', function(socket){
  socket.join('some room');
});

然后在广播或发布时简单地使用to

io.to('some room').emit('some event');

要离开频道,您需要拨打leave

io.on('disconnect', function(socket){
  socket.leave('some room');
});

答案 1 :(得分:-1)

您可以使用cookie将http请求映射到相应的套接字连接。假设我们正在使用cookie sesson-id。 在http请求中将此cookie放在客户端上。

在下面的代码补丁中,在创建新的套接字连接之前,将session-id cookie附加到套接字头。这样您就可以在session-id事件中访问此.on("connection")

   var io = require("socket.io");
   sio = io.listen(server);
   sio.set("authorization", function (data, accept) {
     if (data.headers.cookie) {
       data.cookie = cookie.parse(data.headers.cookie);
       data.headers.sessionID = data.cookie["session-id"];
     }
     accept(null, true);
   });

接下来,存储与其session-id

关联的套接字连接对象
   var sockets = {}; // store all socket connections here
   sio.sockets.on("connection",connected);
   function connected(socket){
      var sessionID = socket.handshake.headers.sessionID;
      sockets[sessionID] = socket;
   }

现在,每当您希望发出与特定http请求相关的套接字事件时:

  function dummyReq(req,res){
    var session_id = // get cookie from req

    //after certain actions
      sockets[session_id].emit("dummy-event","dummy-message");
  }

在您的情况下,您必须为链接到关注这些博客的用户的所有session-id发出套接字事件