![](/img/trans.png)
[英]How to listen to server(express) sent event from client(vue) instantly
[英]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.