1

我是节点 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>
4

1 回答 1

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)
            }); 

    },

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

于 2012-09-03T15:16:02.923 回答