我有一个在Chrome(V8)上运行的客户端,和一个也运行V8的Web服务器(不是Node; Cloudflare工作者)。
服务器只支持接收最大大小为1 MB的WebSocket消息。
我在客户端上运行了一个fetch,它使用ReadableStream,需要通过WebSocket将字节转发到服务器。
ReadableStream的块大小可能不同,似乎未定义。
问题是:对于服务器进程来说,接收许多小的WebSocket消息更有效,还是将相同数量的字节批量处理成较大的WebSocket消息更有效?
我认为更大的WebSocket消息更有效,因为它意味着更少的事件循环事件,更少的函数调用和更少的GC变量。
但我在网上找不到任何信息。
1条答案
按热度按时间smdnsysy1#
虽然从技术上讲,更大的块将增加吞吐量可能是正确的,但在如此大的尺寸下,收益会递减。另一方面,更大的块对于延迟来说更糟糕,因为发送方不能开始发送块,直到它产生了整个东西,并且接收方不能开始处理块,直到它收到了整个东西。此外,大块会导致更多的突发CPU使用,而小块将允许更平滑的CPU使用,即使总的CPU使用总体上更大。大块也会提高内存使用的峰值。
要为任何特定的应用程序找到最佳的块大小,您需要仔细地对该应用程序进行基准测试。然而,没有人有时间这样做。就我个人而言,我通常会选择8k到64k之间的块大小。对于此用例,可能会倾向于64k。