Node.js - Socket.IO Emit上的多个回调

时间:2017-03-10 05:21:02

标签: node.js socket.io

我的 node.js 应用程序存在一些问题。 我会向 socket.io-client 发送一个基本请求给masterserver。主服务器检查ID,如果有效则输出有效令牌。 问题是,当我第二次点击客户端时,它会将请求堆叠在主服务器上并输出console.log x2。

客户端:

function CheckAuthToken(authtoken, clid, callback){
   var token_state;
   console.log("Checking authtoken: " +authtoken);
   authsocket.emit('auth-token-check', {token: authtoken, clid: clid});
   authsocket.on('auth-token-check-callback', function(authresult){
      if(authresult.clid == clid){
        if(authresult.state ==  "token-valid"){
         token_state = "valid";
            callback(token_state);
      }else{
         token_state = "invalid";
            callback(token_state);
      }
    }
  });
}

AuthServer:

socket.on('auth-token-check', function(data){
    mysqlconnection.query('SELECT * FROM `player_token` WHERE `token` = ?', [data.token], function (error, results, fields) {
      if(results.length > 0){
        socket.emit('auth-token-check-callback', {state: 'token-valid',clid: data.clid});
      }else{
        socket.emit('auth-token-check-callback', {state: 'token-invalid',clid: data.clid});
      }
    });
});

我做错了什么?

1 个答案:

答案 0 :(得分:1)

<强>解决方案

而不是一直添加持久性事件监听器(authsocket.on()) 使用authsocket.once。

这解决了我的问题。