[英]How to prevent socket io client (browser) from being overflowed with huge payload coming from server?
我有一個 React.js 客戶端應用程序和一個 Node.js 服務器應用程序,Node.js 應用程序通過socket.io
從另一個微服務實時接收 json 數據。 JSON 數據發送非常頻繁,這會破壞客戶端應用程序。 例如:
pingTimeout
解決了這個問題,但這並沒有解決其他問題) 我還通過增加maxHttpBufferSize
和updateTimeout
來使用它們,但這並沒有真正幫助。 減少maxHttpBufferSize
停止接收消息,但我希望它們以不破壞我的客戶端應用程序的方式接收。
有什么建議可以改善我的處境嗎?
編輯:如果我不發送所有消息而是每隔一秒左右跳過一次,它也可以工作,但我不確定如何實現這一點?
背壓可以通過確認來實現:
socket.on("my-event", (data, cb) => {
// do something with the data
// then call the callback
cb();
});
io.on("connection", (socket) => {
socket.emit("my-event", data, () => {
// the client has acknowledged the packet, we can continue
});
})
參考: https ://socket.io/docs/v4/emitting-events/#acknowledgements
注意:使用易失性數據包在這里不起作用,因為沒有考慮服務器上緩沖的數據量
參考: https ://github.com/websockets/ws/blob/master/doc/ws.md#websocketbufferedamount
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.