如何使用從其他Node進程從另一個Node進程加載的模塊。Node.js到Node.js通信
實施例I運行:
node my_modules
其中負載MyModule
然後我將運行另一種的NodeJS過程:
node grab_modules
這將運行GrabModule
GrabModule
將嘗試使用功能s內MyModule
這可能嗎?如果這可能如何?
如何使用從其他Node進程從另一個Node進程加載的模塊。Node.js到Node.js通信
實施例I運行:
node my_modules
其中負載MyModule
然後我將運行另一種的NodeJS過程:
node grab_modules
這將運行GrabModule
GrabModule
將嘗試使用功能s內MyModule
這可能嗎?如果這可能如何?
你想要什麼可能是dnode:
服務器(它承載的功能來運行):
var dnode = require('dnode');
var server = dnode({
zing : function (n, cb) { cb(n * 100) }
});
server.listen(5050);
的客戶端(在調用的函數服務器,並在回調中得到他們的結果)
var dnode = require('dnode');
dnode.connect(5050, function (remote) {
remote.zing(66, function (n) {
console.log('n = ' + n);
});
});
這取決於你想要做什麼。
如果您只是想從兩個單獨的節點進程重用相同的模塊(MyModule),那很容易。你只需要在GrabModule中放入require('MyModule'),並且在運行grab_module時可以訪問MyModule。
如果你想在兩個進程中'共享'MyModule包括它的全局變量,它要複雜得多。您需要在兩個進程(通常是套接字上的REST)之間定義一個進程間協議,並使用該協議在另一進程的一個進程中訪問該模塊。
1)要在不同的進程中使用模塊(實現)而不是實例(模塊在進程的某處使用require加載),只需要在需要的地方需要該模塊。
如果在進程B中運行兩個進程,例如使用'MyModule'的進程A和使用'GrabModule'的進程B,但只需要'GrabModule',就可以訪問導出的' MyModule「,那麼你只需要使用require('MyModule的路徑')。 2)另一方面,如果你需要一個進程B,可以訪問一個進程A的模塊狀態(一個已經執行的模塊,因爲你在某處使用require),那麼你需要使用一個IPC(進程間通信),允許在進程A和進程B之間交換數據,並在其上建立或使用相同的協議。
根據您的進程是在同一臺機器上還是在不同的機器上,可以在同一個操作系統上使用某些IPC版本,如nodejs提供的子fork(http://nodejs.org/api/child_process.html#child_process_child_process_fork_modulepath_args_options)或使用內置在某個網絡通道中的IPC。
例如,你可以使用Redis的的發佈/訂閱消息系統(http://redis.io/topics/pubsub)
這個怎麼樣:
my_modules將作爲公共API的程序(REST API,XML-RPC, ...) 和grab_modules將連接到api和從my_modules呼叫功能
如果您還需要與其他語言和/或高速互操作性,ZeroMQ也是一個選項。雖然最初是一個普通的C庫,但我對NodeJS綁定有很好的體驗。
有一個ZeroMQ幾乎所有流行的語言綁定,請參閱http://zeromq.org/bindings:_start
不知道你想在這裏做什麼。請提供一個更具體的例子,說明您理想的情況。 –
如果你問我,問題可能會更清楚。 – Alfred