Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从外部作用域访问socket.io作用域_Javascript_Node.js_Socket.io - Fatal编程技术网

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

Javascript 从外部作用域访问socket.io作用域,javascript,node.js,socket.io,Javascript,Node.js,Socket.io,我有一个场景,用户发送POST请求,在express中,我设置了一个路由,获取POST数据,验证它,将它存储在db中,然后我需要将它广播到所有连接的套接字。但是由于socket变量在io.sockets.on('connection')中可用,I可能能够通过闭包访问它的内部范围: Var a = {}; //global io.sockets.on('connection',function(socket){ a.inner = function(data){ socke

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

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

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

谢谢

我总是用这个:

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

随着用户的增长,userIdSocketMapper变得越来越大,并且是不必要的存储,而且即使客户端由于引用而断开连接,套接字对象也不会得到gc。但是一个好主意上面说的是行不通的。套接字a.internal调用可能不是我期望的套接字。