我們正在尋找在我們需要RPC功能的項目中使用NodeJs DNode(https://github.com/substack/dnode)。 它已經設置和測試,似乎很適合該項目。DNode服務器方法超時
雖然一個小竅門。遠程功能可以由用戶定義,因此我們無法控制邏輯。這意味着該函數可能寫得很糟糕,需要花費過多的時間來執行,甚至可能永遠不會完成(無限循環)。
所以問題:有沒有一種方法來實現產生的服務器連接/調用超時檢查/事件/觸發器。
例如如果該函數超過5秒的執行時間,則中止它並將異常信息返回給客戶端。
注意:我們在客戶端上實現了超時邏輯,所以這不成問題。只是不想讓虛假的殭屍進程無故阻塞服務器組件。
編輯: * - 添加代碼示例 - *
服務器(偵聽端口8000,呼我()函數調用的doWork(),永無止境。)
var dnode = require('dnode');
function doWork(cltId) {
console.log('Client:' + cltId);
setTimeout(function() { doWork(cltId); }, 5000);
}
var server = dnode({
callMe: function (cltId, cb) {
doWork(cltId);
}
});
server.listen(8000);
客戶(連接到端口8000和RPC 呼我(),它永遠不會返回)
var dnode = require('dnode');
var net = require('net');
var d = dnode();
d.on('remote', function (remote) {
var cltId = 'c-' + Math.random().toString(16).slice(2);
remote.callMe(cltId , function (s) {
console.log('Result=' + n);
d.end();
});
});
var conn = net.connect(8000);
conn.pipe(d).pipe(conn);
當客戶端運行時,它會掛起,但它可以是死亡或結束該連接超時設置。所以客戶可以繼續做其他事情。
但
服務器將仍然歡快地撐船離開我們永無止境的一段代碼...
隨着越來越多的客戶端連接,並呼籲我們最終額外的雜散殭屍,直到最後躲閃碼我會想象所有服務器資源都被消耗掉了。
是啊,沒有得到它。我的理解是你已經定義了客戶端會調用的服務器代碼。 我用一個簡單的客戶端/服務器示例更新了我的問題,試圖幫助澄清。 – MarkOfSine 2013-03-21 09:36:42