主要更新
业务框架与网络通信框架解耦
新增 ChannelContext 通信通道接口,用于对 bolt AsyncContext、netty Channel 的包装,这样可以使得业务框架与网络通信框架解耦,为将来 ioGame 实现绳量级架构的使用做准备。
移除 FlowAttr.asyncContext 动态属性,由 FlowAttr.channelContext 代替。
业务框架模块移除网络相关的依赖 bolt、netty 等。
游戏对外服 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