繁体   English   中英

在 javascript 中限制来自 websocket 服务器的传入消息

[英]Limit incoming messages from websocket server in javascript

我连接到 Websocket 服务器,它可以同时向我发送 1 或 20 个消息事件。

问题 1
有没有办法限制每个事件的传入消息数量?

例如:

At 16:00:00 - I can get 1 message per event
At 16:00:12 - I can get 5 messages per event
client.on('connect', async (connection) => {
  connection.on('message', async event => {
    console.log(event.length) // <----- length is always undefined
    if (event.type === 'utf8') {
      const data = JSON.parse(event.utf8Data)

      await trigger(data)
    }
  })
})

async function trigger (data) {
  // ... async/await functions
}

例如,如果我每 1 个 websocket 事件收到超过 1 条消息(每个事件 5 条消息),它将一次调用trigger() 5 次。 这不是可接受的方式。

对资源进行速率限制的一种选择是使用“节流”function。 因此,例如每 200 毫秒不超过一次调用看起来像(未测试):

 // from https://stackoverflow.com/a/59378445/3807365 function throttle(func, timeFrame) { var lastTime = 0; return function() { var now = Date.now(); if (now - lastTime >= timeFrame) { func(); lastTime = now; } }; } client.on('connect', async(connection) => { connection.on('message', throttle(event => { console.log(event.length) // <----- length is always undefined if (event.type === 'utf8') { const data = JSON.parse(event.utf8Data) trigger(data) } }, 200)) })

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM