如果我使用此代码创建服务器:
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服务器,它只在回调函数中从服务器发送一条消息。如果有人能够对我的问题有所了解,那将非常感谢!
答案 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);