是否可以将多个处理程序添加到同一个 socket.io.on 事件?

Posted

技术标签:

【中文标题】是否可以将多个处理程序添加到同一个 socket.io.on 事件?【英文标题】:Is it possible to add several handlers to the same socket.io.on event? 【发布时间】:2016-10-08 05:50:38 【问题描述】:

在我的游戏应用程序中,我希望有一个用于处理套接字连接和授权的通用类以及几个用于事件处理的类:

//loading game/lobby/other socket routers
...

var socketRouter = function(server) 
    var io = Io(server);

    io.use(socketioJwt.authorize(
        secret: config.secretKey,
        handshake: true
    ));

    io.on("connection", function(socket) 
        lobbySocketRouter(socket);
        gameSocketRouter(socket);
        //other routers
        ...

        socket.on("disconnect", function() 
            console.log("DISCONNECTED", socket.id);
        );
    );
;

为不同的路由器生成唯一的事件名称以不相互干扰不是问题。问题在于断开连接事件 - 我希望每个路由器都有可能对其执行正确的操作。像这样在每个路由器中添加自己的处理程序来断开事件是否正确,这样每个路由器都会触发:

        //lobbySocketRouter
        socket.on("disconnect", function() 
            //handling lobbySocketRouter special actions
        );
...
        //gameSocketRouter
        socket.on("disconnect", function() 
           //handling gameSocketRouter special actions
        );

?

【问题讨论】:

您可以使用房间及其joinleave 事件,对于每个不同的事件,它比关注disconnect 事件更灵活。 【参考方案1】:
I want every router having possibility to perform right action on it. Is it correct to add own handler to disconnect event in every router like this so each of them would trigger:

路由”我猜你说的是Namespaces,你可以处理多个“路由器”,然后根据命名空间处理每个断开连接事件。

我在my previous answer 中编写了一个模板应用程序,用于在一个数组中获取多个命名空间:

   socket.on('disconnect', disconnectCallback(socket,ns));                        

   function disconnectCallback(socket,ns) 
    return function(msg) //we return a callback function
      if(ns==="blabla") 
         console.log("Disconnected from blabla");
         socket.broadcast.send("It works! on blabla");
        
        .
        . 
        .
       
   ;

然后您可以根据命名空间创建多个断开连接行为,希望对您有所帮助。

如果您还需要其他东西,请告诉我:-)

【讨论】:

以上是关于是否可以将多个处理程序添加到同一个 socket.io.on 事件?的主要内容,如果未能解决你的问题,请参考以下文章

使用Socket.io将消息发送到多个房间?

是否可以使用 Firebase 存储将多个图像添加到 Firebase 数据库? - 颤振

socket.io,动态添加消息处理程序

将页面级 javascript 作为批处理添加到多个 PDF

同时处理TCPUDP的服务

如何在iTunes Connect中添加多个应用内购买?