首页 文章

连接webSocket客户端时,节点httpServer无法关闭

提问于
浏览
0

测试节点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 回答

相关问题