0

60001 から 60020 までのポートごとに 1 つずつ、複数のポートでリッスンする Websocket サーバーを作成しています。以下のセットアップを使用して、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);
        });
    });
});

ソケットが 1 つしか開いていない限り、問題なく動作するようです。しかし、複数のソケットが開くと、ソケットが閉じ始めます。代わりに、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 関数で何が間違っているのか分かりますか?

4

0 に答える 0