首页 > 解决方案 > 通过 forEach 函数监听多个 websocket 端口 - Nodejs

问题描述

我正在创建 websocket 服务器来监听多个端口,每个端口一个从 60001-60020。我正在使用下面的设置将来自 websocket 的数据传输到命名管道。

    ports.forEach(function(port) {
        s = https.createServer(serveropt, app);
        s.listen(port);
        servers.push(s);
        wss = new WebSocketServer({server: s});
        wsservers.push(wss);
        var streamId = port - 60000;
        wstream = fs.createWriteStream('./../scripts/tmp/nodeToFfmpegPipe' + streamId);
        wstreams.push(wstream);
    });
    
    wsservers.forEach(function(wss) {
        wss.on('connection', (ws, req) => {
            streamId = req.socket.localPort - 60000;
            ws.on('message', (msg) => {
                console.log('DATA', msg);
                wstreams[streamId - 1].write(msg);
        });
    });
});

只要只有一个套接字打开,它似乎就可以正常工作。但是当多个套接字打开时,套接字开始关闭。相反,如果我为 wsservers 数组中的每个项目创建多个函数,则它适用于多个套接字。例如。

wsservers[0].on('connection', (ws, req) => {
        var streamId = req.socket.localPort - 60000;
        wstream1 = fs.createWriteStream('/usr/local/nginx/scripts/tmp/nodeToFfmpegPipe' + streamId);
        ws.on('message', (msg) => {
            wstream1.write(msg);
        });
});

知道我在 forEach 函数中做错了什么吗?

标签: javascriptnode.jswebsocket

解决方案


推荐阅读