获取套接字.来自外部作用域的IO作用域

Accessing socket.io scope from outer scope

本文关键字:作用域 IO 外部 套接字 获取      更新时间:2023-09-26

我有一个用户发送POST请求的场景,在express中我设置了一个路由,获得POST数据,验证它,将其存储在db中,然后我需要将其广播到所有连接的套接字。但是,由于套接字变量在io.sockets.on('connection')中可用,我可能能够通过闭包访问它的内部作用域:

Var a = {}; //global
io.sockets.on('connection',function(socket){
    a.inner = function(data){
        socket.broadcast.emit('boo',data)
    }
}

则调用a.inner(data)

这正常吗?有没有更好的方法来访问或调用内部函数?

谢谢

我总是这样用:

var userIdSocketMapper = {};
io.sockets.on('connection', function (socket) {
  var userId = socket.handshake.userId;
  userIdSocketMapper[userId] = socket;
});
app.post('/:userId', function(req, res) {
   var socket = userIdSocketMapper[req.params.userId];
   if (socket) {
     socket.broadcast.emit('boo', data);
   }
});