【问题标题】:Passing a object reference outside of handler, ie make it global在处理程序之外传递对象引用,即使其成为全局对象
【发布时间】:2016-03-17 16:13:23
【问题描述】:

我认为这更像是一个最佳实践问题,但在下文中,谁能告诉我如何将套接字对象的引用传递到它所在的方法处理程序之外?

io.on('connection', function (socket) {
       console.log('connection '+socket);

//do stuff here

});//end callback handler

//need a reference to socket here!!

【问题讨论】:

  • 你打算如何调用需要socket的方法?

标签: javascript node.js socket.io


【解决方案1】:

只需将其分配给该范围内定义的变量?

var globalSocket;

io.on('connection', function (socket) {
  globalSocket = socket;
});

// now what?

但是,我看不出这样做的理由,因为在调用事件处理程序之前您将无法使用该值(您只知道何时调用事件处理程序)。

要解决这个问题,您需要将需要访问套接字的代码放在一个函数中,并从事件处理程序中调用该函数:

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

【讨论】:

    【解决方案2】:

    好吧,您必须将其存储在某种套接字连接池中。但请记住,如果您想通过负载均衡器分布在多个进程/机器中,这将无法很好地工作。

    【讨论】:

    • 或者假设我只有 1 个套接字连接? var socket= io.socket;
    猜你喜欢
    • 1970-01-01
    • 2014-08-25
    • 2012-11-05
    • 1970-01-01
    • 1970-01-01
    • 2018-06-05
    • 1970-01-01
    • 2011-12-07
    • 1970-01-01
    相关资源
    最近更新 更多