在连接时更新套接字的用户信息并断开连接

时间:2015-08-08 01:24:52

标签: javascript node.js sockets events socket.io

现在,下面的代码生成每次连接时递增创建的数字。因此,一个用户进入他们获得播放器1的页面。第二个用户获得播放器2.但是当我关闭浏览器中的标签并打开另一个标签时,我得到了播放器3" ....

  1. 我只希望最多有2名玩家(现在它继续增加)
  2. 如果一个人关闭或重新加载标签,他们将成为第二个玩家,如果另一个标签是原始玩家的一部分,如果他是第二个玩家则成为玩家1

    $(document).ready( function(){
    
     var playernum;
        socket.on("connect", function(){
    
            socket.emit("joinReq", {});
        })
        socket.on("playerNumUpdate", function(data){
            playernum = data.playerNum;
                $(".playernum").html("player num is " + playernum)
        })
        socket.on("disconnect", function(){
            socket.emit("leaveReq", playernum);
            $(".playernum").html("player num is " + playernum)
        })
     });
    
  3. 服务器:

    io.on("connection", function(socket){
    // socket.on("was clicked", function(data){
    //  if(data == true){
    //      socket.emit("return fromclick")
    //  }
    // })
    socket.on("joinReq", function(data){
        playernum++
        socket.emit("playerNumUpdate", {playerNum : playernum})
    })
    socket.on("leaveReq", function(data){
        socket.emit("playerNumUpdate", {playerNum : playernum})
    })
    socket.on("disconnect", function(data){
        playernum = playernum--;
        socket.emit("playerNumUpdate", {playerNum : playernum})
    })
    

    })

1 个答案:

答案 0 :(得分:0)

断开事件应该没有(数据)

socket.on("disconnect", function(){
    playernum = playernum--;
    socket.emit("playerNumUpdate", {playerNum : playernum})
});

如果那不起作用......

试试这个: How can i handle Close event in Socket.io?

  

在客户端:

var socket = io.connect(<your_url>, {
'sync disconnect on unload': true });

问题似乎是断线没有触发。