Chrome with Websockets中的内存泄漏

时间:2016-06-07 20:53:58

标签: websocket

我们正在通过websockets将二进制数据从我们的服务器传输到Web浏览器。 浏览器接收数据就好了;我们可以使用Javascript操作它。

代码是一个非常基本的代码:

   function WebSocketTest()
   {
        if ("WebSocket" in window)
        {
           var ws = new WebSocket("ws://localhost:3456/someresource");

           ......

           ws.onmessage = function (evt) 
           { 
              //var received_msg = evt.data;
              //var reader = new window.FileReader();
              //...........
           };

           ..............................................
           ..............................................

问题是 - 即使是这种最简单的形式(onmessage函数都是空的,所以我们对evt.data没做什么,这是一个二进制blob),Chrome浏览器的内存使用量不断增长,好像垃圾收集器永远不会释放斑点。它会一直持续增长,直到Chrome关闭websocket连接或崩溃。我们尝试使用各种方法手动释放evt.data,但没有任何帮助。您可能希望上面的代码不会导致Chrome中的内存泄漏,对吗?如何释放evt.data引用的blob?

1 个答案:

答案 0 :(得分:1)

嘿,我找到了"内存泄漏的原因" - 它不是内存泄漏,而是我的编程错误。在这里发布以防万一其他人犯同样的错误。发生的事情是 - 对于大于64KB的消息,您需要将数据长度格式化为以网络字节顺序打包的64位整数。我没有正确地将基于Windows的__int64转换为网络字节顺序。所以浏览器认为它下载了一条巨大的消息(10GB或类似的东西) - 并一直下载直到内存不足。