2013-03-08 48 views
1

我使用restify來實現一個node.js服務器。基本上,服務器運行每一個HTTP POST請求的耗時的過程,但不知何故插座被關閉,並且在客戶端接收一個這樣的錯誤消息:如何使用Restify增加服務器端的套接字超時?

[Error: socket hang up] code: 'ECONNRESET' 

根據錯誤類型,插座絕對關閉上服務器端。

有沒有什麼辦法可以在createServer的方法中解決這個問題?

編輯: 長時間運行的過程是使用Mongoose來運行MongoDB進程。也許這也可能是套接字掛斷是由連接到MongoDB引起的?如何增加Mongoose的超時時間?我發現掛機正好發生在120秒內,所以可能是因爲某些默認超時配置?

在此先感謝!

回答

5

您可以req對象使用標準socket,並手動調用setTimeout增加時間節點掛斷套接字之前。默認情況下,節點在所有套接字上都有一個2分鐘的計時器,以便處於非活動狀態,這就是爲什麼您正好在120秒後掛起(這與restify無關)。作爲增加的一個例子,請設置一個處理程序,在您的長時間運行任務之前運行,如下所示:

server.use(function (req, res, next) { 
    // This will set the idle timer to 10 minutes 
    req.connection.setTimeout(600 * 1000); 
    res.connection.setTimeout(600 * 1000); //**Edited** 
    next(); 
}); 
+0

謝謝!我修改了你的答案,以在res上添加超時配置。 – zsong 2013-03-10 05:49:52

相關問題