Estoy construyendo un servidor que usa plumas y socketio .
Estoy tratando de usar el mecanismo de canales de plumas para notificar a los usuarios relevantes (conexiones) sobre eventos relevantes.
Los usuarios pertenecen a grupos, por lo que al conectarme al servidor, agrego la conexión a los canales apropiados.
Al publicar, dentro de app.publish , obtengo los datos correctos y veo que la conexión está adjunta al canal, pero no sé cómo escucharla en el cliente.
Este es un channels.js simplificado:
app.on('connection', async (connection) => { connection.userGroups.forEach((group) => { app.channel(`group.groupId`).join(connection); } app.channel('1').join(connection); // dummy channel } app.publish((data, context) => { console.log(app.channel('1')); // output shown below return app.channel('1'); }); Estoy usando Postman como cliente, envío una solicitud de patch y escucho el evento llamado rooms patched (rooms es mi nombre de servicio) como se describe en losdocumentos de plumas . No llega ningún evento.
Si estoy usando la instancia de socketio sin procesar y emitiendo desde allí, todo parece funcionar bien y obtengo el evento en el cliente
app.io.sockets.in('some room').emit('rooms patched', data);pero según tengo entendido, anula todo el mecanismo de los canales.
Examinando la salida de app.publish
Channel { _events: [Object: null prototype] { empty: [Function: bound onceWrapper] { listener: [Function (anonymous)] } }, _eventsCount: 1, _maxListeners: undefined, connections: [ { provider: 'socketio', headers: [Object], userInfo: [Object], userGroups: [Array] } ], data: null, [Symbol(kCapture)]: false }podemos ver que la conexión está ahí.
¿Alguien puede ayudarme a resolver este problema?
¿Es necesario abrir un puerto en el extremo del cliente para crear el canal para que la línea de comunicación sea de 2 vías? Quizás javascript tendrá algún código para abrir el puerto de clientes.
Encontré mi tonto error tipográfico...
accidentalmente escribí
app.channel(`group.groupId`).join(connection);cuando realmente debería ser
app.channel(group.groupId).join(connection);Eso es una vergüenza realmente.