【问题标题】:accessing socket outside the socket.on('connection') closure在 socket.on('connection') 闭包之外访问套接字
【发布时间】:2013-04-25 06:41:06
【问题描述】:

下面是app.js的一部分,它与客户端有socket连接

io.sockets.on('connection', function (soc) {
    soc.emit('news', { status: 'connected' });
});

我想要做的是访问连接闭包之外的 soc var,像这样

io.sockets.on('connection', function (soc) {
        do something magical here so I can access soc from outside
});
soc.emit('news', { status: 'connected' });

需要添加什么额外的技术来归档这个结构?

【问题讨论】:

    标签: node.js express socket.io


    【解决方案1】:

    您需要在服务器代码中引用您的套接字 io 变量:

    io.sockets.emit('news', { status: 'connected' });

    所以在您的示例代码中,它可能看起来像这样:

    io.sockets.on('connection', function (soc) {
        emit();
    });
    
    function emit(){
        io.sockets.emit('news', { status: 'connected' });
    }
    

    【讨论】:

      【解决方案2】:

      也许你可以试试这样的:

      var foo;
      
      io.on('connection', function(soc){
          foo = new Foo(soc);
      });
      
      function Foo (socket){
          this.emit = function () {
              if(socket)
              {
                  socket.emit('msg');
              }
          }
      }
      

      有人接通后,您可以拨打foo.emit();

      这个答案可能会对您有所帮助: Can't emit from method defined outside of socket connection

      【讨论】:

      • 这将只允许像这样使用一个socket.io 连接(因为每个连接都会调用connection 事件,所以每次都会覆盖全局foo)。可能是这里的用例,我不知道。
      • 对于多个连接,您可以使用foo 作为数组,并在每个连接处将套接字推入其中
      • 一旦连接消失就删除它:)
      猜你喜欢
      • 2015-04-15
      • 2020-01-09
      • 1970-01-01
      • 2017-10-05
      • 1970-01-01
      • 2018-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多