如何使用节点应用程序中的Socket.io将数据发送到所有订阅者

时间:2017-10-24 20:10:24

标签: node.js mongodb sockets express

这是事后路线。当用户发布事件时,该事件应发送给其所有关注者! 我为此保留了Follower数组。

如何使用Socket.io ????

 module.exports.postEvent = (req,res) => {
       Events.saveEvent(req.body , (err,saveEvent)=>{
          var response = {
              status : 500,
              message : err
          };
          var id = req.userId;
          if(err){
              res.status(response.status)
                  .json(response.message);
          }else {
              // find the data of user from token and
                user.getuserbyname(id ,(err,user)=>{
                    if(err){
                        res.status(response.status)
                            .json(response.message);
                    }else{

                        // send to all user subscribers via socket.io
                        async.each(user.followers ,(id , callback)=>{

                         what will be the code here???


                        })
                    }
              })
          }
      })
    };

1 个答案:

答案 0 :(得分:0)

在设置io服务器时附加io instance to your app

app.io = io;

然后可以通过请求对象

获取
router.post('/event', function(req, res){
  req.app.io.emit('message', data)
})

默认房间

每个套接字连接都有Socket#id标识的"Default Room"

您可以通过以下方式发送到请求处理程序中的那个房间:

req.app.io.to(socket_id).emit('my message', msg)

或者通过套接字io处理程序中的套接字:

socket.broadcast.to(socket_id).emit('my message', msg)

房间

SocketIO还提供了Rooms的概念。您可以将套接字joinleave作为一个房间,然后发送到该房间,而不是管理自己的订阅数组。

io.on('connection', function(socket){
  socket.join(`room:${user}`)
})

io.to(`room:${user}`).emit('my message', msg)