使用Socket.io传输数据后,如何释放内存中的数据?

问题描述:

根据Chrome的开发工具,出于某种原因,使用socket.emit()后,数据仍在内存中。由于我必须多次使用这行代码,内存使用量不断增加。 客户端我的JS代码:JS中使用Socket.io传输数据后,如何释放内存中的数据?

socket.emit('upload',{data: a_very_long_string}); 
+0

它是一个严重地影响你的工作或只是知识?你可以把你的发现放在这个问题上,比如它吃了多少内存。 – user568109 2013-04-22 11:40:42

+0

其实,它阻碍了我的工作,因为我正在尝试构建一个使用websocket作为传输数据的方式的游戏。这就像每次使用发射上传一个2M图像,它吃2M(不完全是,但它显示在铬的开发工具的曲线)。但我希望我的游戏能够运行几个小时而不会造成浏览器崩溃。 – 2013-04-22 19:53:37

局部变量(与var声明)是垃圾收集的函数返回时自动。如果它是一个全局变量,则可以通过delete来释放它。所以我想你的情况,这是因为一些全局变量不会在emit()之后发布。

我发现这篇文章谈论Socket.IO中的内存泄漏,这可能对您的情况有所帮助。 http://jpallen.net/2013/03/08/tracking-down-a-memory-leak-in-node-js-and-socket-io/

关于释放变量,你可以参考这个问题:Memory release from local variable in JavaScript

+0

不,我很确定这不是我的js代码中的问题。以下感冒不会引起我的记忆使用:var a =“very ...... long”; socket.emit( '上传',{});但如果我使用:var a =“very ... long”; socket.emit('upload',{a:a});我的内存使用率非常高。另外,我问的是浏览器的内存使用情况,而不是node.js. – 2013-04-22 19:46:57

+0

这个socket.io与在这篇文章中提到的相同,就像在chrome中一样。无论如何,他们运行在V8上,无论你在节点还是chrome中运行它。内存泄漏不是来自您的代码,而是它在套接字模块中。 – Conan 2013-04-23 05:06:12

+0

,但需要知道它是一个socket.io的问题还是V8的问题。如果是V8的,我可以切换到FF甚至IE,因为我的问题是浏览器的崩溃。如果是来自socket.io,我可以尝试其他websocket库。 – 2013-04-24 05:41:06

这是socket.io的问题。这是因为websocket服务器内存泄漏。

看到的解决方案张贴在这里:

  1. http://jpallen.net/2013/03/08/tracking-down-a-memory-leak-in-node-js-and-socket-io/
  2. https://github.com/LearnBoost/socket.io/issues/1015