2017-04-01 2 views
-2

socket.io .emit()가 보내지지만 emit을 잡는 데 필요한 .on()이없는 일반적인 디버깅 문제가 발생했습니다. 그러나 기본적으로 이는 자동으로 실패합니다.Socket.IO emit()이 전송되었지만 어떤 .on() 핸들러에서 수신되지 않았을 때 어떻게 발견 할 수 있습니까?

방출을 보내거나 켜기를 수신했지만 해당 이벤트에 대한 처리기가없는 경우를 감지하는 방법이 서버 또는 클라이언트에 있습니까? 내가 Socket.IO/Socket.IO-client v1.7.3로 타이프 라이터/ES6을 사용하고 내 목적을 위해

답변

0

나는 socket.io 리스너가 소켓의 onEvent 방법을 납치함으로써 이러한 목표를 달성 할 수 있었다 소켓 이벤트가 수신 대기중인 이벤트의 키와 연결되어 있고 이벤트 이름을 비교하면 다음과 같습니다.

(주의 : _callbacks를 사용하려는 클라이언트의 서버 버전입니다. 각 키의 시작)

io.on('connection', (socket)=>{ 
    var onevent = socket.onevent; 
    var eventNames = Object.keys(socket._events); 
    socket.onevent = function (packet) { 
     onevent.call(this, packet);// original call 

     var eventName = packet.data[0]; 

     if(eventNames.indexOf(eventName) == -1){ 
      console.error('No handler for emitted event: '+eventName); 
     } 
    }; 
}); 
+0

그건 명목상의 의미에 관한 것입니다. socket.io의 작동 방식에 익숙하지 않은 사람들을 어떻게 혼란스럽게하는지 봅니다. 더 일반적인 코드 샘플을 업데이트했습니다. 필자는 확실히 API 기반 솔루션을 선호하지만 누군가가 하나가 될 때까지이 작업을 수행해야합니다. –

+0

제 답변은 서버 측이지만 실제로는 양쪽에서 작동합니다. 당신의 변론에서 저는 문제의 문구를 찾기 위해 고심하고 있었고, 제가 간결함이 노력의 결여로 오인 될 수 있음을 알 수있었습니다. 나는 당신의 노력에 감사하지만, 당신은 내가 두 배로 돌아 서서 스스로 해결책을 찾으려고 노력할 것을 확신했다. –

+0

코드가 잘 작동하고, 오후 내내 사용하고 있습니다. 클라이언트와 서버 모두에서 실행됩니다. 기본적으로 양측이 emit 이벤트를 수신 할 리스너를 등록하지 않은 경우 emit을 수신하면 콘솔에 기록됩니다. 이것이 이루는 것은 오타를 만들거나 양쪽면에 이벤트를 등록하는 것을 잊어 버린 경우 고아가 된 방출을 잡아서 콘솔에 기록하는 것입니다. 다시 말하지만, 이것은 프로덕션을위한 것이 아니라 디버깅을위한 것입니다. –

관련 문제