【发布时间】:2020-05-24 14:51:14
【问题描述】:
我正在阅读 Boost.Beast WebSocket。当我的应用程序得到备份时,websocket 发送方似乎很乐意延迟/缓冲数据(大概在应用程序级别,因为它们会延迟 1 分钟或更长时间)。
如果我得到备份,最好的衡量方法是什么?例如,我可以查看 TCP 缓冲区的大小吗?我还可以在快速线程中将所有数据读入内存,并将其放入慢速线程的队列中(在这种情况下,备份可以通过队列的大小来衡量)。但是我想知道是否有更直接的方法。
【问题讨论】:
-
您似乎确切地知道“备份”是什么意思。我不认为这是常见的行话。你能用语言表达你所看到的,以及你认为正在发生的事情吗?我认为一般来说,队列机制 /(可选地带有 / 协议反馈功能,例如“发送更少的请求”,甚至“这种 [类型] 请求将在 n 毫秒内被接受”)是处理服务器过载的正确方法。如果您认为延迟发生是因为 IO 线程被非 IO 拖慢了,您可以将它们分开
-
“备份”是指“排队”——我处理数据的速度比接收数据的速度要慢。排队发生在我的应用程序级别以下 - 在入站 TCP 缓冲区中。我试图找出一种方法来了解这一点。一种方法是
boost::asio::basic_stream_socket<boost::asio::ip::tcp>::available(),但该函数需要大约 3us 才能运行,这比我希望的要慢。我没有能力告诉发件人在应用程序级别放慢速度。当我的 TCP 缓冲区已满时,它们似乎会变慢,但我不确定为什么 - 可能是丢包/重新传输?
标签: boost websocket boost-asio boost-beast beast-websockets