iohao / ioGame

无锁异步化、事件驱动架构设计的 java netty 网络编程框架; 轻量级,无需依赖任何第三方中间件或数据库就能支持集群、分布式; 适用于网络游戏服务器、物联网、内部系统及各种需要长连接的场景; 通过 ioGame 你可以很容易的搭建出一个集群无中心节点、集群自动化、分布式的网络服务器;FXGL、Unity、UE、Cocos Creator、Godot、Netty、Protobuf、webSocket、tcp、socket;java Netty 游戏服务器框架;
http://game.iohao.com
GNU Affero General Public License v3.0
834 stars 183 forks source link

对外服对某个路由实现拦截 #288

Closed molin7596 closed 3 months ago

molin7596 commented 3 months ago

如果我想在对外服对某个路由实现拦截 进行一些处理, 再根据处理结果 是否放行,框架是否自带? 需要自定义扩展吗

过滤器 and 拦截器

自定义扩展:我这种做法 对吗 ?

/**
 * 路由拦截器
 */
@ChannelHandler.Sharable
public class CmdInterceptorHandler extends SimpleChannelInboundHandler<BarMessage> {

    @Override
    protected void channelRead0(ChannelHandlerContext ctx, BarMessage message) {
        int cmdMerge = message.getHeadMetadata().getCmdMerge();
        CmdInfo cmdInfo = CmdInfo.of(cmdMerge);
        // todo

        ctx.writeAndFlush(message);
    }

    public CmdInterceptorHandler() {
    }

    public static CmdInterceptorHandler me() {
        return CmdInterceptorHandler.Holder.ME;
    }

    /**
     * 通过 JVM 的类加载机制, 保证只加载一次 (singleton)
     */
    private static class Holder {
        static final CmdInterceptorHandler ME = new CmdInterceptorHandler();
    }

}
iohao commented 3 months ago

没问题,在游戏对外服 (yuque.com)中扩展一些自定义的 Netty Handler。

同时,框架也提供了很多内置与可选的 Handler (yuque.com),可以适当的参考,如下

https://github.com/iohao/ioGame/blob/cd3156fa8e6a1e564e2bd717716e739112916743/external/external-netty/src/main/java/com/iohao/game/external/core/netty/handler/CmdCheckHandler.java#L41-L59

molin7596 commented 3 months ago

框架后续迭代中会提供此类功能吗

iohao commented 3 months ago

暂时没这个计划,因为 netty handler 已经具备拦截功能了。