このスレッドHow do I shutdown a Node.js http(s) server immediately?で受け入れられた答えを変更して、nodejsサーバーを閉じることができました。ノードjsサーバーでソケットタイムアウト例外を作成します
// Create a new server on port 4000
var http = require('http');
var server = http.createServer(function (req, res) { res.end('Hello world!'); }).listen(4000);
// Maintain a hash of all connected sockets
var sockets = {}, nextSocketId = 0;
server.on('connection', function (socket) {
// Add a newly connected socket
var socketId = nextSocketId++;
sockets[socketId] = socket;
console.log('socket', socketId, 'opened');
// Remove the socket when it closes
socket.on('close', function() {
console.log('socket', socketId, 'closed');
delete sockets[socketId];
});
});
...
when (bw == 0) /*condition to trigger closing the server*/{
// Close the server
server.close(function() { console.log('Server closed!'); });
// Destroy all open sockets
for (var socketId in sockets) {
console.log('socket', socketId, 'destroyed');
sockets[socketId].destroy();
}
}
ただし、クライアント側では、server.close()文のためにクライアント側でConnectionExceptionがスローされます。私は、クライアントがSocketTimeoutExceptionをスローするようにします。つまり、サーバはアクティブですが、ソケットはちょうどハングします。他の人がJavaの桟橋サーバーでこれを行うことができました
Server jettyServer = new Server(4000);
...
when (bw == 0) {
server.getConnectors()[0].stop();
}
これを実現することは可能でしょうか?私はしばらくの間これに固執しています、どんな助けも非常に高く評価されます。ありがとう。
多分私は十分に明確ではありませんでした。サーバーが新しい接続の受け入れを停止するため、接続クロージャは、クロージャが発生した後にクライアントが接続を試みるときにConnectExceptionを引き起こします。これについてはhttps://docs.oracle.com/javase/7/docs/api/java/net/ConnectException.htmlおよびhttps://nodejs.org/api/net.html#net_server_close_callbackを参照してください。その部分は期待通りに私のために働いた。とにかく、私はSocketTimeoutExceptionも作成する方法を考え出しました。ほんとありがと。 –