【问题标题】:Can't listen to event sent from feathers server to client无法收听从羽毛服务器发送到客户端的事件
【发布时间】:2022-01-12 11:22:42
【问题描述】:

我正在构建一个使用 featherssocketio 的服务器。

我正在尝试使用羽毛通道机制来通知相关用户(连接)相关事件。
用户属于组,因此在连接到服务器后,我将连接添加到适当的通道。
发布后,在app.publish 内, 我得到了正确的数据并看到连接已附加到通道,但无法弄清楚如何在客户端上收听它。

这是一个简化的channels.js

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');
});

我使用 Postman 作为客户端,发送 patch 请求,并监听名为 rooms patched 的事件(房间是我的服务名称),如 feathers docs 中所述。没有活动到达。
如果我使用原始 socketio 实例并从那里发出,一切似乎都工作正常,我在客户端中得到了事件

app.io.sockets.in('some room').emit('rooms patched', data);

但据我了解,它覆盖了整个渠道机制。

通过检查 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
}

我们可以看到连接那里。

谁能帮我解决这个问题?

【问题讨论】:

  • 您能告诉我们您是如何将 Postman 设置为客户的吗?还向我们展示完整的 channels.js?
  • 发现我的错误,我不小心输入了被反引号包围的频道名称,它应该是一个普通的字符串变量。

标签: javascript socket.io postman feathersjs


【解决方案1】:

是否需要在客户端打开端口才能创建通道,因此通信线路是 2 路。也许javascript会有一些代码来打开客户端端口。

【讨论】:

    【解决方案2】:

    发现我愚蠢的拼写错误...
    不小心写了

    app.channel(`group.groupId`).join(connection);
    

    什么时候应该是

    app.channel(group.groupId).join(connection);
    

    真是可惜了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多