gpt4 book ai didi

javascript - 具有多个设备的 Windows 上的 Node 串行端口挂起

转载 作者:行者123 更新时间:2023-12-03 09:47:16 27 4
gpt4 key购买 nike

我一直在尝试使用 Node 串行端口库来访问连接到 USB 集线器的设备并向这些设备发送/接收数据。该代码在 Linux 上运行良好,但在 Windows(Windows 8.1 和 Windows 7)上我得到一些奇怪的行为。它似乎不适用于 2 个以上的设备,它只是在写入端口时挂起。 write 方法的回调永远不会被调用。我不确定如何调试这个问题。我不是 Windows 用户,如果有人能给我一些指导,那就太好了。

下面是我当前用于测试的代码。

/*
Sample code to debug node-serialport library on windows

*/

//var SerialPort = require("./build/Debug/serialport");
var s = require("./serialport-logger");
var parsers = require('./parsers');
var ee = require('events');


s.list(function(err, ports) {
console.log("Number of ports available: " + ports.length);
ports.forEach(function(port) {
var cName = port.comName,
sp;
//console.log(cName);

sp = new s.SerialPort(cName, {
parser: s.parsers.readline("\r\n")
}, false);

// sp.once('data', function(data) {
// if (data) {
// console.log("Retrieved data " + data);
// //console.log(data);
// }

// });

//console.log("Is port open " + sp.isOpen());

if(!sp.isOpen()) {
sp.open(function(err) {
if(err) {
console.log("Port cannot be opened manually");

} else {
console.log("Port is open " + cName);

sp.write("LED=2\r\n", function(err) {
if (err) {
console.log("Cannot write to port");
console.error(err);

} else {
console.log("Written to port " + cName);


}

});


}

});

}

//sp.close();
});
});

我相信你会注意到我不需要串行端口库,而是使用串行端口记录器库,它只是使用串行端口插件的一种方法,这些插件是通过 Windows 盒子上的调试开关编译的。

最佳答案

TLDR;对我来说,它的工作原理是增加 libuv 的线程池大小。$ UV_THREADPOOL_SIZE=20 && Node server.js

我暂时可以为每个命令打开/关闭端口,但我现在正在处理的功能请求需要保持端口打开并重用连接来运行命令。所以我必须找到这个问题的答案。

通过打开连接并保持连接可以支持的设备数量是 3。问题恰好是默认线程池大小 4。我已经有另一个后台工作线程占用 1 个线程,所以我只剩下 3 个线程。 EIO_WatchPort Node 串行端口中的函数作为后台工作程序运行,这会导致线程阻塞。因此,当我使用超过 3 个设备时,“open”方法调用正在队列中等待推送到后台工作人员,但由于它们都很忙,因此会阻塞 Node 。那么 Node 就无法处理任何后续请求。最后增加线程池大小就成功了,现在工作正常。它可能对某人有帮助。另外this线程绝对帮助了我。

关于javascript - 具有多个设备的 Windows 上的 Node 串行端口挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30983672/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com