【问题标题】:client browser hangs on using node js and socket.io客户端浏览器使用节点 js 和 socket.io 挂起
【发布时间】:2012-08-28 02:50:36
【问题描述】:

我是节点 js 的新手。

我使用 node js 和 socket.io 为浏览器游戏聊天。经过几天的学习和编码聊天工作正常,但我遇到了问题 - 客户端浏览器在更多客户端操作后挂起。

例如:客户端点击“添加”按钮多次添加文本到聊天中,每次点击后,浏览器挂起越来越多,但页面刷新后,一切正常,直到他再次点击“添加” " 按钮多次。

而且这个问题不仅出现在“添加”按钮上,而且当客户多次更改聊天(仅显示私人或公共聊天)时。

我不认为问题出在服务器代码中,因为当浏览器为我挂起时,其他客户端的聊天工作正常。 所以我认为问题出在客户端。在那里,我使用带有默认设置的 socket.io。

也许有人遇到同样的问题并知道如何解决?

<script src="sockets/socket.io.min.js"></script>
<script>
var socket = io.connect('http://'+chatSocketAddress+':'+chatSocketPort);
function ANgetChatRecords(){
  socket.emit('getRecords', { my_id:my_id, type:chat_pub_chatShow, my_perm:my_perm, lang:my_lang });
  socket.on('getRecordsAnswer', function (data) {
    document.getElementById("chatbox_pub_entry").innerHTML = data.text; 
  });
} //and ther other similar functions, like add record, delete record ... 
</script>

【问题讨论】:

  • 问题几乎肯定出在客户端,正如您所怀疑的那样。你能给我们看看 pastebin 或类似的代码吗?
  • 客户端代码很简单:
  • 您是否检查过是否为同一个事件添加了许多侦听器?

标签: node.js socket.io


【解决方案1】:

我只是说你可以设置更多的 socket.on() ,即使不是明确的。 您那里的代码看起来很干净,但也许您正在向同一个事件添加更多内容并将它们堆叠起来。 添加一些控制台日志,以便您查看它们实际被调用的次数。

我的代码如下所示:

 listenForMessage: function(){
        param_socket.on("new", function (data) {
                console.log('new');
                console.log(data);
                app.newHandler(data);
            });

        param_socket.on("done", function (data) {
                console.log('done');
                app.doneHandler(data.id,data.success)
            });

        param_socket.on("change", function (data) {
                console.log('change');
                app.changeHandler(data.id,data.success)
            }); 

    },

还有一件事,你是不是只调用了一次这个函数?因为您正在设置活动。

【讨论】:

  • 哦,我认为你是对的,因为在每次点击时,客户端调用函数,并在每个函数中添加新的监听器。现在我将听众移出功能,似乎效果很好。 tnx ;)
猜你喜欢
  • 2015-10-21
  • 1970-01-01
  • 1970-01-01
  • 2012-07-08
  • 1970-01-01
  • 2016-06-16
  • 1970-01-01
  • 1970-01-01
  • 2011-09-04
相关资源
最近更新 更多