我已经在树莓派上设置了一个节点服务器,以在Adafruit Dotstar灯条上显示一系列颜色。该功能的工作方式如下:我向localhost:8000/fade
发出HTTP请求,服务器通过运行fade.js文件进行响应,该文件是一个无限循环,通过光带上的不同颜色逐渐消失。不幸的是,我希望能够退出此命令,并通过对localhost:8000/off
的另一个请求来关闭灯带。
我已经尝试使用child_process
包来运行“淡入淡出”代码,同时还监听新的请求。但是,我无法取消“淡入淡出”过程。
下面发布的是我的app.js代码。关于如何终止child_process或以其他方式重组代码以实现相同目标的任何建议?我真的只需要能够连续运行“淡入淡出”代码,同时还能响应新请求。
p.s。这是我的第一个JS项目,请轻松!任何帮助表示赞赏。
app.js:
var express = require('express'),
app = express();
app.get('/', function (req, res) {
res.send('App is responding to requests');
});
app.get('/fade', function (req, res) {
var fork = require('child_process').fork;
child = fork('./sequences/fade.js');
});
app.get('/off', function (req, res) {
var fork = require('child_process').fork;
child = fork('./sequences/off.js');
});
app.listen(8000, function () {
console.log('Example app listening on port 8000!')
})
fade.js:
console.log("running fade.js");
var dotstar = require('dotstar'),
SPI = require('pi-spi'),
sleep = require('sleep');
spi = SPI.initialize('/dev/spidev0.0');
const ledStripLength = 30;
const ledStrip = new dotstar.Dotstar(spi, {
length: ledStripLength
});
while(1) {
fade(); //where fade is a long sequence of colors
};
答案 0 :(得分:0)
var child; // Outer scope, available in both functions.
app.get('/fade', function (req, res) {
var fork = require('child_process').fork;
child = fork('./sequences/fade.js');
});
app.get('/off', function (req, res) {
// (might be a good idea to check if child exists and is running first...)
child.kill('SIGHUP');
});
也http://programmergamer.blogspot.com/2013/05/clarification-on-sigint-sigterm-sigkill.html
SIGHUP:...一个进程必须显式处理此信号才能起作用。 ...
因此,SIGINT
是要关闭而不在前叉侧操作的封闭物,还是SIGKILL
是要杀死那个mofo的东西。