簡體   English   中英

無法收聽從羽毛服務器發送到客戶端的事件

[英]Can't listen to event sent from feathers server to client

我正在構建一個使用feathers 和 socketio服務器。

我正在嘗試使用羽毛通道機制來通知相關用戶(連接)相關事件。
用戶屬於組,因此在連接到服務器后,我將連接添加到適當的通道。
發布后,在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 patched 的事件(房間是我的服務名稱),如羽毛文檔中所述。 沒有事件到達。
如果我使用原始socketio實例並從那里發出,一切似乎都工作正常,我在客戶端中得到了事件

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

但據我了解,它覆蓋了整個渠道機制。

通過檢查 app.publish 中的 output

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
}

我們可以看到連接那里。

誰能幫我解決這個問題?

是否需要在客戶端打開端口才能創建通道,因此通信線路是兩種方式。 也許 javascript 會有一些代碼來打開客戶端端口。

發現我愚蠢的拼寫錯誤...
我不小心寫了

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

當它真的應該是

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

這真的很可惜。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM