Javascript 从外部作用域访问socket.io作用域
我有一个场景,用户发送POST请求,在express中,我设置了一个路由,获取POST数据,验证它,将它存储在db中,然后我需要将它广播到所有连接的套接字。但是由于socket变量在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
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调用可能不是我期望的套接字。