永远运行节点脚本

问题描述:

我正在写一个正在等待消息的应用程序,然后会执行一些操作。消息通过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}/`); 
// }); 
+0

所以你希望节点服务器在运行时运行? – 2016-08-02 04:01:13

+0

只要有套接字连接,监听服务器或等待计时器,节点进程就会保持运行。如果你的应用至少没有其中一个,那么无论如何它都不可能真的做任何事情。如果您的redis频道订阅是与某个其他服务器进程的连接,那么只要您拥有该连接,您的节点应用就应该继续运行。 – jfriend00

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