Я использую Node Serialport с NWJS, и я заметил, что если я открою последовательный порт и перейду к новой HTML-странице в моем пользовательском интерфейсе, любые последующие попытки использовать этот последовательный порт приведут к «Ресурсу временно недоступен, Не удается заблокировать порт "ошибки.
Это может быть воспроизведено с минимальным кодом, так как мне нужно только открыть порт и затем перейти к нему:
const SerialPort = require('serialport');
port = new SerialPort("/dev/ttyUSBO", {
autoOpen: false,
baudRate: 9600,
dataBits: 8,
parity: "none",
stopBits: 1
});
port.open();
//now navigate to a new page and try this code again... explosions!
Если я заскочил lsof | grep tty
в терминал, я вижу, что мое приложение все еще удерживает порт, когда я перешел на новую страницу:
exe 16370 user 149uW CHR 188,0 0t0 550 /dev/ttyUSB0
TaskSched 16370 2197 user 149uW CHR 188,0 0t0 550 /dev/ttyUSB0
TaskSched 16370 2198 user 149uW CHR 188,0 0t0 550 /dev/ttyUSB0
exe 16370 9068 user 149uW CHR 188,0 0t0 550 /dev/ttyUSB0
exe 16370 9069 user 149uW CHR 188,0 0t0 550 /dev/ttyUSB0
exe 16370 9070 user 149uW CHR 188,0 0t0 550 /dev/ttyUSB0
exe 16370 9071 user 149uW CHR 188,0 0t0 550 /dev/ttyUSB0
ScriptStr 16370 12948 user 149uW CHR 188,0 0t0 550 /dev/ttyUSB0
TaskSched 16370 16372 user 149uW CHR 188,0 0t0 550 /dev/ttyUSB0
TaskSched 16370 16374 user 149uW CHR 188,0 0t0 550 /dev/ttyUSB0
Chrome_Ch 16370 16375 user 149uW CHR 188,0 0t0 550 /dev/ttyUSB0
GpuMemory 16370 16376 user 149uW CHR 188,0 0t0 550 /dev/ttyUSB0
Font_Prox 16370 16377 user 149uW CHR 188,0 0t0 550 /dev/ttyUSB0
Composito 16370 16378 user 149uW CHR 188,0 0t0 550 /dev/ttyUSB0
Composito 16370 16379 user 149uW CHR 188,0 0t0 550 /dev/ttyUSB0
Composito 16370 16380 user 149uW CHR 188,0 0t0 550 /dev/ttyUSB0
Composito 16370 16381 user 149uW CHR 188,0 0t0 550 /dev/ttyUSB0
TaskSched 16370 16893 user 149uW CHR 188,0 0t0 550 /dev/ttyUSB0
Теперь, конечно, если я закрою свое приложение и снова открою его, то я смогу снова использовать последовательный порт ... Или, если я закрою порт перед навигацией, я смогу снова открыть его на следующей странице. Поэтому я просто пытаюсь закрыть его заранее, чтобы открыть его на новой странице:
port.close(); //do this before navigating... everything is fine.
Однако Я бы хотел оставить порт открытым между страницами и повторно получить его на новой странице ! Я не хочу, чтобы другое приложение вызывало метки на освобожденном порте, пока я меняю страницы, и я не хочу постоянно закрывать и открывать порты (мне все равно нужен порт ... просто на новой странице, сейчас).
Я еще не нашел средства сделать это в документации SerialPort или в каких-либо дискуссиях о том, как сделать это в Интернете, поэтому любые предложения будут высоко оценены! Мне кажется, что я я что-то упускаю, потому что, когда проблемы обсуждаются мало, я нахожу, что это происходит потому, что решение очевидно для всех -_-
Так как мое приложение - это то, что открыло порт в первую очередь, и, поскольку, как установлено выше, оно все еще имеет контроль над портом, есть способ для меня восстановить его, как только я измененные страницы? Видимо, просто создается новый экземпляр SerialPort с тем же путем
на новой странице недостаточно хорошо.
В противном случае, есть ли способ заставить NWJS / SerialPort отбрасывать все последовательные порты, которые он удерживает при изменении страницы? По крайней мере, я хотел бы гарантировать, что порт не может быть постоянно "заблокирован", потому что он как-то не закрылся до того, как страница изменилась. Этот подход не решил бы мою озабоченность по поводу кражи портов при смене страниц, но, по крайней мере, смягчает сценарии, когда необходимо перезапустить приложение, чтобы продолжить использовать уже захваченный порт.