永远运行节点脚本
问题描述:
我正在写一个正在等待消息的应用程序,然后会执行一些操作。消息通过Redis频道接收。所以,我需要nodejs脚本无限运行(据我所知)永远运行节点脚本
我怎样才能使它运行,而无需启动节点服务器(我觉得启动服务器这样一个简单的任务是错误的)。
代码:
const redis = require("redis")
const subscriber = redis.createClient()
const http = require('http');
const hostname = '127.0.0.1';
const port = 3002;
subscriber.on("message", (channel, message) => {
console.log(Buffer.from(message, 'base64'));
})
subscriber.subscribe('test')
// Server code, which i was using to start infinity loop
//
// const server = http.createServer((req, res) => {
// res.statusCode = 200;
// res.setHeader('Content-Type', 'text/plain');
// res.end('Hello World\n');
// });
//
// server.listen(port, hostname,() => {
// console.log(`Server running at http://${hostname}:${port}/`);
// });
答
subscriber.js
const redis = require("redis"); const subscriber = redis.createClient(); const hostname = '127.0.0.1'; const port = 6379; subscriber.on("message", function(channel, message) { console.log(message); }); subscriber.subscribe('test');
publisher.js
const redis = require("redis"); const publisher = redis.createClient(); const hostname = '127.0.0.1'; const port = 6379; publisher.publish('test',"Hello I am Here !!!");
这是用于发布者和订阅者的示例代码。无需运行HTTP服务器来订阅redis。你只是想继续运行subscriber.js。
如果此通道在特定的一天处于非活动状态,则会进入睡眠状态。因此所有其他消息都可能丢失。
如果你想避免这种情况,你需要运行调度脚本来发布假消息的渠道,特别是天(可以是每天一次)
您可以使用永远NPM模块运行你的节点不断。
+0
你的代码中不需要主机名和端口变量,在你的情况下它只会执行一次。 – Src
所以你希望节点服务器在运行时运行? – 2016-08-02 04:01:13
只要有套接字连接,监听服务器或等待计时器,节点进程就会保持运行。如果你的应用至少没有其中一个,那么无论如何它都不可能真的做任何事情。如果您的redis频道订阅是与某个其他服务器进程的连接,那么只要您拥有该连接,您的节点应用就应该继续运行。 – jfriend00