Выполнение node.js зависает после перезагрузки - PullRequest
1 голос
/ 15 июня 2019

КОНФИГУРАЦИЯ:

Я создаю робота FPV, которым можно управлять через веб-браузер локально по Wi-Fi.

Я запустил MVP. Я получаю 640x480 @ 20FPS с 240 мс латентного видеопотока в веб-браузере и получаю 7 мс латентности на элементах управления.

Я использую веб-сервер NODE.JS на Raspberry Pi 3B +. Операционная система Raspbian Stretch. Я использую Socket.IO для обеспечения двунаправленного управления с низкой задержкой и веб-сокетов для передачи потоковых пакетов.

ПРОБЛЕМА:

После выключения Raspberry NODE.JS когда-нибудь остановится после выполнения. Я не получаю ошибок и не имею обратной связи о том, почему NODE застревает. для выключения требуется CTRL-C.

pi@MazeRunner:~ $ node 2019-06-09-ffmpeg/node.js


Если я выпускаю NODE.JS как отдельный процесс, я могу продолжать использовать RPI, но NODE завис в фоновом режиме.

pi@MazeRunner:~ $ node 2019-06-09-ffmpeg/node.js &  
[1] 778
pi@MazeRunner:~ $

ОПИСАНИЕ:

1) Иногда NODE.JS может восстановиться самостоятельно примерно через 5 минут ожидания без обратной связи. Это только начинается.

pi@MazeRunner:~ $ node 2019-06-09-ffmpeg/node.js
INFO: Server interface - enxb827eb23ca00 192.168.0.202
INFO: 192.168.0.202 listening to html requests on port 8080
INFO: /home/pi/2019-06-09-ffmpeg/index.html has been loaded into memory
INFO: /home/pi/2019-06-09-ffmpeg/style.css has been loaded into memory
INFO: /home/pi/2019-06-09-ffmpeg/jsmpeg.min.js has been loaded into memory

2) Иногда я могу восстановить рабочее состояние NODE путем инициализации npm, но иногда эта команда также застревает.

pi@MazeRunner:~ $ npm --init yes

3) Я всегда могу восстановить узел, удалив его с помощью apt-get remove и переустановив его с помощью apt-get install, что явно невозможно сделать

4) Я пытался искать логи node.js или npm, но мне не удалось найти их

5) Похоже, что завершение работы перед отключением питания значительно увеличивает вероятность того, что node.js не замерзнет при запуске.

pi@MazeRunner:~ $ sudo shutdown now

ВОПРОС:

1) Есть ли способ, чтобы node.js генерировал подробные журналы отладки где-нибудь для устранения проблем? Нет сообщений об ошибках ни в STDOUT, ни в STDERR

2) Я бы хотел, чтобы робот работал по принципу «включай и работай» и чтобы он работал постоянно после внезапного отключения питания. Я могу добавить кнопку выключения на странице браузера, но вы можете легко забыть использовать ее. Отключение консолл-сервером вообще лишает вас возможности иметь интерфейс управления браузером.

Есть ли способ сделать так, чтобы распбианцы могли быстро отключиться?

Спасибо за любую помощь, которую вы можете оказать!

1 Ответ

1 голос
/ 16 июня 2019

Ваш код может заблокировать цикл обработки событий.Особенно когда имеешь дело с веб-сокетами, это опасная причина, потому что цикл цикла может просто подождать, пока он не будет отмечен галочкой, и двигаться дальше.В этом случае нет способа обрабатывать журналы или что-то еще.Node.js запускается в одном потоке, если ваш код блокирует цикл обработки событий, все ваше приложение зависнет.

Вы также можете проверить этот модуль https://github.com/naugtur/blocked-at

Ссылки
https://nodejs.org/en/docs/guides/event-loop-timers-and-nexttick/
https://www.youtube.com/watch?v=8aGhZQkoFbQ
https://medium.com/the-node-js-collection/what-you-should-know-to-really-understand-the-node-js-event-loop-and-its-metrics-c4907b19da4c

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...