Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google chrome Chrome中的websocket接收缓冲区_Google Chrome_Websocket - Fatal编程技术网

Google chrome Chrome中的websocket接收缓冲区

Google chrome Chrome中的websocket接收缓冲区,google-chrome,websocket,Google Chrome,Websocket,我有一个应用程序,我在其中打开一个从浏览器(在我的例子中是Chrome)到服务器的websocket,然后开始从服务器端向浏览器发送消息。我发现,当我从服务器发送消息太快时,浏览器端的消息开始被缓冲。这意味着浏览器“落后”并最终处理服务器很久以前发送的消息,这在我的应用程序中是不可取的 我已经排除了发生这种缓冲的以下可能的候选者: 服务器。我可以完全终止服务器进程,并且我看到javascript代码会在几分钟内继续接收消息,因此缓冲不会在服务器进程内发生 网络。当在与web浏览器相同的机器上运

我有一个应用程序,我在其中打开一个从浏览器(在我的例子中是Chrome)到服务器的websocket,然后开始从服务器端向浏览器发送消息。我发现,当我从服务器发送消息太快时,浏览器端的消息开始被缓冲。这意味着浏览器“落后”并最终处理服务器很久以前发送的消息,这在我的应用程序中是不可取的

我已经排除了发生这种缓冲的以下可能的候选者:

  • 服务器。我可以完全终止服务器进程,并且我看到javascript代码会在几分钟内继续接收消息,因此缓冲不会在服务器进程内发生

  • 网络。当在与web浏览器相同的机器上运行服务器时,我可以重现同样的问题,并且我发送的数据量远远低于与localhost的TCP连接的带宽限制

这将离开浏览器。我有没有办法(a)确定chrome为我的websocket保留的缓冲区的大小,或者(b)减小缓冲区的大小并导致chrome丢弃帧

  • (a) 每个WebSocket连接的Chrome缓冲区大约为128KB。金额 缓冲数据的数量对应用程序不可见
  • (b) Chrome永远不会故意掉落框架(这将违反标准)
  • 当Javascript所做的处理微不足道时,Chrome可以通过WebSocket每秒处理超过50MB的数据。因此,听起来您所做的处理非常重要。您可以在onmessage处理程序中删除太旧的消息(但请记住,客户端上的时钟可能与服务器上的时钟不同步)


    如果浏览器的主线程总是很忙,即使删除消息也可能不足以跟上。我建议使用Chrome Devtools中的“性能”选项卡来查看您的应用程序在哪里花费时间。

    有什么建议吗?消息时间戳似乎与websocket何时收到消息无关。我会让服务器为每条消息发送一个时间戳。然后,我将尝试使用第一条消息上的时间戳来确定服务器时钟和客户端时钟之间的偏移量。在onmessage处理程序中,我会将消息上的时间戳与服务器时钟的估计值进行比较,如果消息超出某个阈值,则忽略消息。