Nodejs如何访问回调函数之外的tcp套接字

时间:2015-05-11 17:07:29

标签: javascript node.js

如果我使用此代码创建服务器:

var net = require('net');
server = net.createServer(function(sock){
    /** some code here **/
});
server.listen(9000);

如何在回调函数之外访问套接字?这将有助于我能够创建一个插槽阵列/列表,只要我需要将数据发送到特定客户端,我就可以存储和访问它们。

我确实有一个奇怪的解决方法,我目前正在使用,但我不认为这是正确的方法。基本上我通过说:

将socket添加到服务器对象
this.socket = sock

在createServer的回调函数中。

然后我可以访问它说server.socket但这只有在只有一个客户端时才真正有用。

为了更好地理解我想要实现的目标,我创建了一个具有构造函数的类,该函数保存了这段代码:

this.server = net.createServer(this.handleConnection)

此类还有 handleConnection 方法用作回调。我还有一个名为 start 的方法,可以使用端口作为参数来调用 server.listen(port)

我想要完成的是一种类似下面的方法:

sendCommand(message, socket){
    socket.write(message);
}

这样,服务器可以从不在 createServer 的回调函数内的函数向客户端发送消息。请记住,我是在一个类中执行此操作,因此在回调函数中使用this关键字可以访问网络服务器对象,而不是我创建的类。

我看到的每个例子都是一个非常简单的tcp服务器,它只在回调函数中从服务器发送一条消息。如果有人能够对我的问题有所了解,那将非常感谢!

1 个答案:

答案 0 :(得分:1)

我不确定这是不是你之后的事情,但我会这样做。

var net = require('net');
var conns = [];

var server = net.createServer(function(sock){
    conns.push(sock);

    sock.on('close', function (){
        // TODO: Remove from conns
    });
});

server.listen(9000);