在 socket.on('connection') 闭包之外访问套接字

ang*_*iwi 6 node.js express socket.io

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

io.sockets.on('connection', function (soc) {
    soc.emit('news', { status: 'connected' });
});
Run Code Online (Sandbox Code Playgroud)

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

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

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

小智 5

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

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

所以在您的示例代码中,它可能如下所示:

io.sockets.on('connection', function (soc) {
    emit();
});

function emit(){
    io.sockets.emit('news', { status: 'connected' });
}
Run Code Online (Sandbox Code Playgroud)


Eli*_*ard 0

也许你可以尝试这样的事情:

var foo;

io.on('connection', function(soc){
    foo = new Foo(soc);
});

function Foo (socket){
    this.emit = function () {
        if(socket)
        {
            socket.emit('msg');
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

某人接通后,您可以致电foo.emit();

这个答案可能对您有帮助: Can't从套接字连接之外定义的方法发出