2017-02-10 134 views
0

不確定這是否是服務結構問題或node.js問題。服務結構node.js guest應用程序express.js服務器EADDRINUSE

基本上this是我的問題。我部署了node.js應用程序,它工作正常。我重新部署它失敗的節點應用程序,服務器返回EADDRINUSE。當我運行netstat -an時,該端口未被使用。這就好像節點仍然在某處運行,有些如何,但不會出現在任務列表等。

任何人有任何想法?

回答

1

不完全確定,但我相信這是因爲我使用的服務器(express.js)或者說節點沒有關閉並關閉現有連接,導致Windows認爲端口仍在使用中。至少,這就是它的樣子。

我找不到它「正式」記錄,但是從this(引用如下)中可以看到,SF嚮應用程序發送SIGINT以試圖在殺死它之前結束它。

下面的代碼似乎解決我的問題:

var app = express(); 
var server = app.listen(17500); 

if (process.platform === "win32") { 
    var rl = require("readline").createInterface({ 
     input: process.stdin, 
     output: process.stdout 
    }); 

    rl.on("SIGINT", function() { 
     process.emit("SIGINT"); 
    } 
} 

process.on("SIGINT", function() { 
    server.close(function() { 
     process.exit(0); 
    }); 
}); 

對於Linux節點,我想你會想監聽「SIGTERM」爲好。

我想知道是否有任何補救措施,但在前面提到的情況下,VMSS完全無法使用 - 我無法部署或運行​​節點Web服務器。如何重新啓動集羣而不破壞它並重新創建它?我現在意識到,你不能只是重新啓動VMSS情況下不管三七二十一,因爲如果你這樣做,顯然是不可撤銷地服務織物完全打破


Rajeet奈爾[RajeetN @ MSFT]

服務織物也發送一個Ctrl-C服務進程並等待服務終止。如果服務未終止3分鐘,則該進程將被終止。

相關問題