1
我實現了對我們的node.js服務器的優雅停留。基本上是這樣的:當我關閉一個http服務器時,爲什麼我的套接字掛斷?
var shutDown = function() {
server.on('close', function() {
console.log('Server ' + process.pid + ' closed.');
process.exit();
});
console.log('Shutting down ' + process.pid + '...');
server.close();
}
然而,當我關閉這樣的服務器,我得到一個Error: socket hang up
錯誤在我連續請求。
我認爲server.close()
會使服務器停止監聽並接受新的請求,但繼續處理所有掛起/打開的請求。但是,這應該導致Error: connect ECONNREFUSED
。
我在做什麼錯?
附加信息:該服務器由一個主和三個分叉的子/工組成。但是,船長沒有監聽或綁定到一個港口,只有這些孩子,並且他們如上所述被關閉。
我對你提出的實際上正是在第一塊:) 但是,當我先檢查連接數並在沒有剩下任何連接後調用'close()'時,可能需要很長時間直到沒有連接剩下爲止。 從看文檔看,我認爲在調用close()後,服務器將停止監聽,然後等待所有掛起的請求都處理完畢,然後纔會退出()。這就是我正在做的,這就是套接字掛起的地方。 我們一定誤解了一些東西。 – nekaab
嗯,這很奇怪。看看會發生什麼,如果你執行console.log('Remaining connections:'+ server.connections);'在'server.close()'之前和之後,還有'console.log('Remaining connections:'+ this .connection);''在'process.exit()'之前。也許這會提供一些有用的信息。 – pieman72