从外部作用域访问socket.io作用域

时间:2013-06-17 06:22:50

标签: javascript node.js socket.io

我有一个用户发送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)

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

由于

1 个答案:

答案 0 :(得分:0)

我总是使用这个:

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);
   }
});