我正在构建一个FPV机器人,该机器人可以通过Wi-Fi上的本地网络浏览器进行控制。
我启动了MVP并开始运行。我在网络浏览器上获得了640x480 @ 20FPS的视频流,延迟为240mS,而控件上的延迟为7mS。
我正在树莓派3B +上运行NODE.JS Web服务器。操作系统是Raspbian Stretch。我正在使用Socket.IO提供低延迟的双向控件和Websocket来传输流数据包。
关闭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)有时我可以通过初始化npm将NODE恢复到工作状态,但有时此命令也会卡住。
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)我希望该机器人可以即插即用,并在突然切断电源后使其始终如一地工作。我可以在浏览器页面上添加关闭按钮,但是您很容易忘记使用它。通过控制台进行关机完全消除了拥有浏览器控制界面的麻烦。
是否有办法使树莓派安全突然关闭?
感谢您能提供的任何帮助!
答案 0 :(得分:1)
您的代码可能会阻塞事件循环。特别是在处理websocket时,这是一种危险的原因,循环可能会等到它被“触发”并继续前进。在这种情况下,将无法处理日志或其他任何内容。 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
答案 1 :(得分:0)
我在使用“Pi Zero”(ARMv6) 和节点 v10 时遇到了同样的问题,当我 strace node
时,我可以看到 node
挂在 getrandom(
中。
好像重启后树莓上的熵不够。
我打过电话
$ sudo apt install rng-tools
$ sudo systemctl enable rng-tools
在 reboot
之后问题得到解决。