Java Netty 游戏服务器框架 ioGame 17.1.26,业务框架与网络通信框架解耦

时间:2022-12-06 11:15:29

主要更新

 

#27

业务框架与网络通信框架解耦

新增 ChannelContext 通信通道接口,用于对 bolt AsyncContext、netty Channel 的包装,这样可以使得业务框架与网络通信框架解耦,为将来 ioGame 实现绳量级架构的使用做准备。

移除 FlowAttr.asyncContext 动态属性,由 FlowAttr.channelContext 代替。

业务框架模块移除网络相关的依赖 bolt、netty 等。

 

#28

游戏对外服 netty 编排业务钩子接口

新增 ChannelPipelineHook netty 业务编排的处理器钩子接口,用于游戏对外服。

 

ExternalServerBuilder 新增 channelPipelineHook ,用于自定义 netty 业务编排的处理器。

废弃标记 ExternalServerBuilder.channelHandlerProcessors 属性及其相关地方为过期,由 ChannelPipelineHook 来代替,使用示例如下。

 

使用示例代码

public class ExternalServerBuilderApplication {
    public static void main(String[] args) {
        // netty ChannelHandler 编排
        var myChannelPipelineHook = new ChannelPipelineHook() {
            @Override
            public void initChannelPipeline(ChannelPipeline pipeline) {
                pipeline.addLast("ExternalBizHandler", new ExternalBizHandler());

                // pipeline.addFirst("ssl", ssl)
            }
        };

        // 游戏对外服构建器
        ExternalServerBuilder builder = ExternalServer.newBuilder(10100);
        builder.channelPipelineHook(myChannelPipelineHook);
    }
}

 

通常情况下,这样的编排方式也会更加清晰,因为代码统一在这里做编排了。开发者在自定义业务编排时,可以通过这个钩子接口,比如添加一个 SSL。

 

注意事项:在调用 hook 前,会经过 ExternalChannelInitializerCallback.initChannelPipeline(SocketChannel) ,

ExternalChannelInitializerCallback 接口的实现类有

  • ExternalChannelInitializerCallbackWebsocket
  • ExternalChannelInitializerCallbackTcp

这些实现类中,会给 ChannelPipeline 添加上一些默认的处理器,通常是编解码相关的。

 

其他

移除扩展相关模块 borker-starter-ext