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 関数で何が間違っているのか分かりますか?