2016-10-03 4 views
-1

このスレッド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(); 
} 

これを実現することは可能でしょうか?私はしばらくの間これに固執しています、どんな助けも非常に高く評価されます。ありがとう。

答えて

0

あなたが求めるものは不可能です。終了していないが、タイムアウト期間中にデータを配信していない接続から読み取ると、SocketTimeoutExceptionがスローされます。

接続が終了してもそれが発生しません。そのようなことはないので、ConnectionExceptionのいずれかが発生しません。 EOFException、ヌル戻り値はreadLine()、戻り値はread()、戻り値が無効の場合はIOException: connection resetです。

あなたの質問は理にかなっていません。

+0

多分私は十分に明確ではありませんでした。サーバーが新しい接続の受け入れを停止するため、接続クロージャは、クロージャが発生した後にクライアントが接続を試みるときにConnectExceptionを引き起こします。これについてはhttps://docs.oracle.com/javase/7/docs/api/java/net/ConnectException.htmlおよびhttps://nodejs.org/api/net.html#net_server_close_callbackを参照してください。その部分は期待通りに私のために働いた。とにかく、私はSocketTimeoutExceptionも作成する方法を考え出しました。ほんとありがと。 –

関連する問題