Javascript 如何检测Socket.IO emit()何时被任何.on()处理程序发送但未被接收?

Javascript 如何检测Socket.IO emit()何时被任何.on()处理程序发送但未被接收?,javascript,typescript,socket.io,ecmascript-6,Javascript,Typescript,Socket.io,Ecmascript 6,我遇到了一个常见的调试问题,其中发送了socket.io.emit(),但没有相应的.on()来捕获emit,但是这基本上是无声地失败的 服务器或客户机上是否有一种方法可以检测何时发送了emit或何时接收了on,但该事件没有处理程序 出于我的目的,我将TypeScript/ES6与Socket.IO/Socket.IO-client v1.7.3一起使用,通过让Socket.IO侦听器在套接字连接时劫持套接字的onevent方法,并将发出事件名称与套接字正在侦听的事件的键进行比较,我能够做到这一

我遇到了一个常见的调试问题,其中发送了socket.io.emit(),但没有相应的.on()来捕获emit,但是这基本上是无声地失败的

服务器或客户机上是否有一种方法可以检测何时发送了emit或何时接收了on,但该事件没有处理程序


出于我的目的,我将TypeScript/ES6与Socket.IO/Socket.IO-client v1.7.3一起使用,通过让Socket.IO侦听器在套接字连接时劫持套接字的onevent方法,并将发出事件名称与套接字正在侦听的事件的键进行比较,我能够做到这一点:

(注意:这是服务器版本,在客户端上要使用_回调并删除每个键开头的“$”)


这是一个关于命名法的公平观点,我可以看出它会让不熟悉socket.io工作原理的人感到困惑。我已经更新了代码示例,使其更加传统。虽然我当然更喜欢基于API的解决方案,但在有人提出解决方案之前,这是必须的。我的答案是服务器端,但实际上两者都适用。在你的辩护中,我正在努力表达这个问题,我可以看出我的简短是如何被误认为缺乏努力的。不过,我很感谢你的努力,你说服了我,让我自己回去寻找解决方案。代码运行得很好,我整个下午都在使用它。它同时在客户端和服务器上运行。基本上,当任何一方接收到emit时,如果它没有为该emit事件注册的侦听器,它会记录到控制台。当您输入错误或忘记注册任何一方向其发出的事件时,就会捕获孤立的发出并将其记录到控制台。同样,这是为了调试,而不是为了生产。我做到了,在第一句话中。将来,如果您不理解某个问题,我建议您进行澄清。我想我知道您正在从服务器上寻找一种方法,以了解客户端何时没有针对您发送的消息的事件处理程序,反之亦然,我基于这种理解提供了一个答案。你没有就我的回答提供任何反馈(除了可能的否决票——不确定是谁做的)。然后,当你提供了完全不同的答案时,我问了你一大堆问题,你花了几个小时才最终澄清。对不起,我想帮忙。再见。
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);
        }
    };
});