这是我假设的最佳实践问题,但在下文中,有人能告诉我如何在方法处理程序之外传递套接字对象的引用吗?
io.on('connection', function (socket) {
console.log('connection '+socket);
//do stuff here
});//end callback handler
//need a reference to socket here!!
答案 0 :(得分:0)
好吧,你必须将它存储在某种套接字连接池中。但请记住,如果您想在具有负载均衡器的多个进程/机器中进行分发,这将无法正常工作。
答案 1 :(得分:0)
只需将其分配给该范围内定义的变量吗?
var globalSocket;
io.on('connection', function (socket) {
globalSocket = socket;
});
// now what?
但是,我没有理由这样做,因为在调用事件处理程序之前你无法使用该值(只有在调用事件处理程序时才会知道)。 / p>
要解决这个问题,您需要将需要访问套接字的代码放在函数中,并从事件处理程序中调用该函数:
var globalSocket;
io.on('connection', function (socket) {
globalSocket = socket;
doSomething();
});
function doSomething() {
// do something with globalSocket
console.log(globalSocket);
}
但是将socket
作为参数传递给函数会更加优雅:
io.on('connection', function (socket) {
doSomething(socket);
});
function doSomething(socket) {
// do something with socket
console.log(socket);
}