测试节点httpServer和webSocketServer(ws)
尝试实现在连接客户端后将关闭的http-ws服务器,如下所示:
var HTTPserver =
httpServer(require('path')
.join(__dirname, 'www'));
HTTPserver
.on('listening', function()
{
console.log('HTTP listening:');
//---------------
var WebSocket = require('ws');
var webSocketServer =
new WebSocket.Server(
{
server: HTTPserver
});
webSocketServer
.on('connection',
function(ws)
{
console.log('client connected');
setTimeout(function()
{
console.log('trying to close webSocketserver');
webSocketServer.close();
setTimeout(function()
{
console.log('trying to close HTTPserver');
HTTPserver.close();
}, 1000);
}, 1000);
});
})
.on('close', function()
{
console.log('server closed'); // never happens
})
.on('error', function()
{
console.log('server error');
})
.listen(8000);
// this works when no Client Connection
/*
setTimeout(function()
{
HTTPserver.close();
}, 3000);
*/
我上传了完整的测试项目 . https://github.com/kenokabe/http-ws-test
HTTPserver.close();
正常工作,没有 ws
客户端连接 .
HTTPserver.close();
与 ws
客户端连接无效(无法关闭) .
知道发生了什么以及如何解决这个问题?谢谢 .
** PS . 请注意我需要关闭的是
不仅是 ws
连接,还有httpServer .
我需要经常打开和关闭整个 .
关闭httpServer的原因是项目是针对插件的,需要在特定情况下关闭httpServer . **
UPDATE
我修改了代码以在httpServer之前关闭webSocketServer,但仍然存在httpServer .
1 回答
我更新了我的gitHub
https://github.com/kenokabe/http-ws-test
寻找How do I shutdown a Node.js http(s) server immediately?
Force close all connections in a node.js http server
connection-> socket需要为每个都销毁 .
对于我的示例代码,我使用
ES6 observe
方法 .http://wiki.ecmascript.org/doku.php?id=harmony:observe#object.observe http://wiki.ecmascript.org/doku.php?id=harmony:observe_api_usage
https://github.com/jdarling/Object.observe