2016-08-02 110 views
0

我正在寫一個正在等待消息的應用程序,然後會執行一些操作。消息通過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

回答

0

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