javascript - Net.Socket 实例不会在 NodeJS 中消失

标签 javascript node.js sockets tcp

我正在尝试使用 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/

相关文章:

javascript - 在 JavaScript 中获取跨度的 id。

javascript - colorlib 个人模板图片会相互加载,直到页面刷新为止,有任何指示我应该在哪里查看吗?

sockets - 非阻塞套接字 - 如何检查连接是否成功?

c++ - 关于 Connect 之前我应该​​拥有什么的问题

java - 它适用于 Debian 5.0,但在 ubuntu 11.10 上会导致段错误

javascript - Jquery/javascript 复制到剪贴板

javascript - Async/Await 执行前仍返回数据

javascript - 具有不同配置的相同 Passport js 策略 (SAML)

javascript - 如何使用 mocha、chai 和 sinon 模拟和测试闭包

javascript - Webpack 无法正确解析我的别名