Nodejs如何访问callback函数外的tcp套接字
如果我使用这个代码创build一个服务器:
var net = require('net'); server = net.createServer(function(sock){ /** some code here **/ }); server.listen(9000);
如何访问callback函数之外的套接字? 这将帮助我能够创build一个数组/套接字列表,我可以存储和访问每当我需要发送数据到特定的客户端。
我有一个奇怪的解决方法,我目前正在使用,但我不认为这是正确的方法。 基本上我说socket添加到服务器对象:
this.socket = sock
里面的createServer的callback函数。
然后,我可以访问它说server.socket,但是这只有真正有用的,如果只有一个客户端。
为了更好地理解我正在尝试完成的事情,我创build了一个具有构造函数的类来保存这段代码:
this.server = net.createServer(this.handleConnection)
这个类也有方法handleConnection用作callback。 我也有一个叫start的方法,可以用一个端口作为参数来启动server.listen(port) 。
我想要完成的方法如下:
sendCommand(message, socket){ socket.write(message); }
这样服务器就可以从一个不在createServer的callback函数中的函数向客户端发送消息。 请记住,我正在从一个类中这样做,所以在callback函数中使用this关键字访问networking服务器对象,而不是我创build的类。
我看到的每个例子都是一个非常简单的tcp服务器,它只在callback函数中有一个从服务器发送的消息。 如果有人能够解释我的问题,那将是非常感谢!
我不确定这是你以后的事情,但我会做这样的事情。
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);
var net = require('net'); var listeners = []; server = net.createServer(function(sock){ /** some code here **/ listeners.push(sock); sock.on('close', function (){ var index = listeners.indexOf(sock); if (index > -1) { listeners.splice(index, 1); } }); }); server.listen(9000);