我有一个应用程序,我从浏览器(在我的情况下是Chrome)打开websocket到服务器,然后我开始从服务器端向浏览器发送消息。我发现,当我从服务器发送消息太快时,消息开始在浏览器端缓冲。这意味着浏览器落后于#34;并最终处理服务器很久以前发送的消息,这在我的应用程序中是不可取的。
我已经消除了以下可能出现缓冲的候选人:
服务器。我可以完全杀死服务器进程,我看到我的javascript代码继续接收消息几分钟,所以缓冲不会发生在服务器进程内。
网络。在与我的Web浏览器在同一台机器上运行服务器时,我可以重现相同的问题,并且我发送的数据量远远低于与localhost的TCP连接的带宽限制。
这会离开浏览器。有什么方法可以(a)确定我的websocket维护缓冲区的大小,或者(b)减小这个缓冲区的大小并导致chrome丢帧?
答案 0 :(得分:2)
当Javascript完成的处理非常简单时,Chrome可以通过WebSocket每秒处理超过50 MB的数据。所以听起来你正在进行的处理是非常重要的。您可以删除onmessage处理程序中过旧的消息(但请记住,客户端上的时钟可能与服务器上的时钟不同步。)
如果浏览器的主线程总是忙,即使丢弃消息也可能不足以跟上。我推荐" Performance" Chrome Devtools中的标签是查看应用程序花费时间的好方法。