¿Cómo envío correctamente la transmisión a un proceso secundario? Estoy tratando de transmitir audio del cliente al servidor usando este método
Estoy recibiendo la transmisión de audio del cliente
const ss = require('socket.io-stream'); const socketIo = require('socket.io'); server = http.createServer(app); io = socketIo(server); const child_process = childProcess.fork('./child_process.js'); io.on('connect', (client) => { // when the client sends 'stream-transcribe' events // when using audio streaming ss(client).on('stream-transcribe', function(stream, data) { var combine_data = { "data": data, "stream": stream, "event":"new_stream" } child_process.send(combine_data) } }esta llamada
child_process.send(combine_data)lanza el error
node:internal/child_process/serialization:127 const string = JSONStringify(mensaje) + '\n'; ^
TypeError: Conversión de estructura circular a JSON -> comenzando en el objeto con el constructor 'Namespace' | propiedad 'servidor' -> objeto con constructor 'Servidor' | propiedad 'nsps' -> objeto con constructor 'Objeto' --- propiedad '/' cierra el círculo en stringify () en writeChannelMessage (node:internal/child_process/serialization:127:20) en ChildProcess.target._send (nodo: internal/child_process:837:17) en ChildProcess.target.send (node:internal/child_process:737:19) en Socket. (/Volumes/GoogleDrive/My Drive/app/server.js:236:40) en Socket.onstream (/Volumes/GoogleDrive/My Drive/app/node_modules/socket.io-stream/lib/socket.js:184: 14) en Socket.emit (nodo:eventos:526:28) en Socket. (/Volumes/GoogleDrive/My Drive/app/node_modules/component-bind/index.js:21:15) en Socket.emit (node:events:526:28) en /Volumes/GoogleDrive/My Drive/app/node_modules /socket.io/lib/socket.js:528:12
Node.js v17.5.0
¿Qué está causando el error y cómo puedo enviar la transmisión a child_process?
Cualquier dato que envíe usando child_process.send() se convertirá en una cadena usando JSON.stringify() . Los datos que intenta enviar son demasiado complejos para convertirlos en una cadena. En particular, utiliza referencias circulares. Puede verificar esto fácilmente usando console.log() o un depurador.
Puede intentar enviar solo datos que se puedan convertir en una cadena. Probablemente no debería intentar enviar ningún stream y solo enviar los campos de data relevantes.
De lo contrario, probablemente pueda pipe() la secuencia a la stdin del proceso secundario.
Basado en la documentación :
ss(client).on('stream-transcribe', function(stream, data) { stream.pipe(child_process.stdin); }); En el proceso secundario, puede leer los datos de stdout , que es un flujo legible .
child_process.stdout.on('data', (chunk) => { // do something with `chunk` });