我正在尝试使用 Node 重新创建硬件串行服务器的功能并且它确实在工作,但是我从已关闭的套接字实例中收到错误。
这是该应用程序的简化版本,用于展示我在做什么...
var net = require('net');
var SerialPort = require('serialport');
var connectionCounter = 0;
var port = new SerialPort('/dev/ttyUSB0', function () {
var server = net.createServer();
server.on('connection',function(socket) {
connectionCounter++;
var connNumber = connectionCounter;
socket.on('error', function () {
console.log('socket ' + connNumber + ' errored');
});
socket.on('data', function(data) {
port.write(data);
});
port.on('data', function(data) {
socket.write(data);
});
});
server.listen(8887, '127.0.0.1');
}
});
所以发送到 8887 端口的第一段代码工作正常,它通过套接字返回数据。错误从第二个 block 开始。在该示例中,我保留了套接字实例的计数并输出带有错误的套接字实例编号。所以随着程序的运行,套接字实例的数量不断增加。最近的实例最终会处理数据,但我不知道我需要删除什么来清理所有以前的套接字实例,这样它们就会停止尝试处理传入的数据。
我试过 socket.end() 和 socket.destroy(),但它们似乎不起作用。我是否需要删除服务器本身并重新创建它?
最佳答案
如果有人发现这个并关心出了什么问题,每次创建新的网络套接字时,我都会在串行端口对象上设置一个事件监听器。因此,即使我每次关闭套接字时都会删除套接字,串行端口监听器仍会尝试将数据发送到所有已删除的旧套接字。所以解决方案是在关闭网络套接字时从串行端口对象中删除监听器。
关于javascript - Net.Socket 实例不会在 NodeJS 中消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39028796/