2013-06-14 5 views
2

Я использую NodeJS для подключения сканера штрих-кода к веб-интерфейсу. Последовательный порт сканера штрих-кода запускается на ПК (Windows7 pro x64) через конвертер usb-to-serial. Я использую node-serialport. Эта установка работает при установке в музее.NodeJS с использованием node-serialport иногда перестает отвечать на запросы

Компьютер перезагружается ежедневно, и иногда сканер штрих-кода отлично работает весь день, но примерно в 25% случаев он перестанет работать в течение дня. С прекращением работы я имею в виду, что NodeJS больше не ретранслирует входящий последовательный поток. Сам сканер штрих-кода, кажется, все в порядке, он все еще звучит счастливо, и после перезагрузки он будет функционировать просто отлично. Пока NodeJS не перестанет работать снова.

Когда сканер перестает работать, окна NodeJS не показывают никаких кодов ошибок, но к тому времени он полностью не отвечает. К тому времени, похоже, невозможно закрыть экземпляр NodeJS. Я попробовал Ctrl-C, завершив процесс через диспетчер задач и используя taskkill, чтобы убить PID из NodeJS из окна CMD. Все они имеют эффект ZERO. При использовании Taskkill окно CMD с радостью скажет, что процесс был убит, но окно NodeJS не будет закрываться и также сохраняется в диспетчере задач. Только решительная перезагрузка «решит» это.

Я чувствую, что у меня очень мало информации для продолжения. Мне бы хотелось несколько советов о том, что попробовать дальше.

+0

У меня такая же проблема с node.js в socket.io –

ответ

0

У меня была проблема с моим кодом, так как команда serialport.write завершилась с ошибкой после трех попыток. Похоже, проблема заключалась в том, что моя функция serialport.write ждет ответа после записи. Однако у меня также есть синхронный код .. (console.log), который не может быть выполнен, так как функция ответа обратного вызова не будет выполняться до тех пор, пока не будет запущено действие, инициированное последовательным портом. Это, кажется, путает nodejs, кажется, вы не можете смешивать асинхронные обратные вызовы и код синхронизации в том же рутинном

global.serialPort.write("a", function(err, results) { 

    console.log('results ' + results); }); 

console.log('completed'); 

Снятия, что последняя строка означает, что процедура работала. Взгляните на свой код и посмотрите, есть ли у вас эта смесь

+0

На самом деле не связана с проблемой, описанной в вопросе. – PTS

+0

Интересно, что вы упомянули 3 попытки - у меня есть аналогичная проблема, но это всего 3 устройства, а не 3 попытки (открыть такое же устройство). Я не уверен, что вы подразумеваете, смешивая синхронизацию и асинхронный код. Не могли бы вы рассказать? – opensourcegeek