2014-01-29 38 views
0

我有一個在後臺運行在我的服務器上的進程。對象以這種方式導出將變量傳遞給正在運行的node.js程序

module.exports = new Application() 

因爲我只希望對象的一個​​實例永遠存在。

然後我有一個單獨的過程,試圖調用Application的原型函數process。它看起來像這樣

var app = require('./Application.js'); 

app.process(process.argv[2]); 

並說這個文件被稱爲process.js。然後我會打電話node process.js thing_to_pass

問題是,每次我這樣做,它都會重新實例化application,這會導致我不尋找的行爲。

我該如何解決這個問題?我正在考慮使用socket.io在兩個進程之間進行通信,但這看起來很駭人聽聞。

回答

3

你不會走上你想要走下去的道路。由於您有兩個不同的進程,因此您將創建Application的兩個不同實例。通過socket.io從一個進程發送消息到另一個進程並不是那種黑客攻擊,絕對是值得考慮的事情。

你也可以考慮使用child_process和發送消息與killhttp://nodejs.org/api/process.html

+0

爲什麼它聲明一個新的應用程序實例?爲什麼它不只是拉入已經存在的那個? – Loourr

+1

因爲您正在使用兩個不同的進程,它們是完全獨立的。 – bendecoste

0

如果您使用Linux,那麼我會建議使用UNIX域套接字。

0

如果您想讓正在運行的進程接收新數據,則必須以某種方式偵聽該數據。無論您是設置HTTP服務器並接受並使用新數據或socket.io處理請求,還是等待命令行中的信息,查看文件以進行更改或您有什麼。

如果您啓動了一個完整的獨立進程,它將從當前正在運行的進程的各個方面進行邏輯分離,並且感謝上帝,否則完全獨立的應用程序可能會以非預期的方式彼此混淆。