套接字事件发生两次

时间:2016-04-20 04:41:53

标签: jquery node.js sockets

我正在使用nodejs和socket.io中的多房间聊天系统。

这是我的服务器端脚本

socket.on('sendchat', function (data) {

    socket.username = data.name;
    // store the room name in the socket session for this client
    socket.room = data.room;
    // add the client's username to the global list
    usernames[data.name] = data.name;
    // send client to room
    socket.join(data.room);

    // we tell the client to execute 'updatechat' with 2 parameters
    io.sockets.in(data.room).emit('updatechat',data.name, data);
});

和客户端

    socket.on('updatechat', function (username, data) {
    var html = '<div class="media">'+ 
                '<div class="media-left"> '+
                   '<a href="#"> '+
                      '<img class="media-object img-circle" data-src="holder.js/64x64" alt="64x64" '+
                       'src="assets/images/profile/'+data.img+'" data-holder-rendered="true" style="width: 64px; height: 64px;">'+
                          '</a>'+
                           '</div>'+ 
                           '<div class="media-body">'+
                            '<h4 class="media-heading">'+data.name+'</h4> <p>'+data.message+'</p><a class="chat-time">'+
                             '<i class="glyphicon glyphicon-time"></i>'+moment().format('MMMM Do YYYY, h:mm:ss a')+'</a></div>'+ 
                          '</div>';                   

     $("#dash_threads").html(html); });

每当触发此事件时,它都会发生两次。我检查了所有可能的解决方案,但没有一个有效。任何人都可以指导我在哪里做错了。

1 个答案:

答案 0 :(得分:0)

实际上这是由于两个原因。

1)空闲连接后重新启动套接字连接 2)包括套接字文件两次。

如果是第一次将事件监听器添加到套接字,可以通过添加一些布尔值来检查它是否首次发生连接。

client.isFirstTime = false;
socket.on('connect',function(){
 if (!client.isFirstTime){
      // add event listeners
 }
});