2017-11-19 8 views
0

내가 내 socket.iosocket.io - Android 클라이언트에서 '다음 (새 오류())'이벤트를 수신 할 수 없습니까? 내 노드 JS 백엔드에서

내 로그에 따라서 적절하게
io.use(async function (socket, next) { 
     try { 
      socket.decoded = await db.verifyAuthToken(socket.handshake.query.token, io.secret); 
      next(); 
     } 
     catch (err) { 
      console.error("Socket error validating JWT: " + err); 
      socket.disconnect(); 
      next(new Error("Socket auth error: No token provided")); 
     } 
    }); 

에 대한 몇 가지 매우 간단한 인증이 오류가 성공적으로 잡아서 처리됩니다.

mSocket.on("error", new Emitter.Listener() { 
       @Override 
       public void call(Object... args) { 
        Log.e(this.getClass().getName(), Arrays.toString(args)); 
       } 
      }); 

mSocket.on("connect_error", new Emitter.Listener() { 
       @Override 
       public void call(Object... args) { 
        Log.e(this.getClass().getName(), Arrays.toString(args)); 
       } 
      }); 

그러나 디버깅 후, 내 백엔드가 next(new Error()) 호출을 수행 할 때 해당 이벤트의도가 호출되는 것을 깨닫게 : 내 클라이언트 (안드로이드)에서 나는 모두 errorconnect_error 이벤트에 대한 리스너가 있습니다. 여기서 무엇이 잘못 될 수 있습니까? 클라이언트가이 오류를 성공적으로 수신 할 수있게하려고합니다. 그렇지 않으면 소켓은 이벤트를 발생/수신 할 때 정상적으로 작동합니다.

답변

1

next() 함수를 호출하기 전에 socket.disconnect()을 호출하는 것이 문제라고 생각합니다. 방금 모든 소켓의 연결을 끊었다면 클라이언트가 오류 이벤트를 어떻게 받습니까?

고객이 클라이언트에서 "disconnect"을 수신하는 경우 오류가 발생하면 뭔가를 얻을 것이라고 생각합니다. 실제로 연결을 끊으므로 "connect_error" 이벤트가 아닙니다. 따라서 모든 분리를 포착하거나 적극적으로 분리하지 않고 오류를 처리해야한다고 생각합니다.