【发布时间】:2016-10-04 08:22:18
【问题描述】:
所以我修改了这个线程 How do I shutdown a Node.js http(s) server immediately? 中接受的答案,并且能够关闭我的 nodejs 服务器。
// 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();
}
有可能实现这样的目标吗?我已经坚持了一段时间,非常感谢任何帮助。谢谢。
【问题讨论】:
标签: node.js sockets server jetty