知识卡片
无状态Handler单例共享
内容
每来一个新连接,[[ChannelInitializer的一次性初始化设计]]都会重新执行addLast,若Handler无成员变量,每次new新实例纯属浪费。标注@ChannelHandler.Sharable并做成单例,多个Channel即可共享同一Handler对象。若确实有连接相关状态,把状态挂到Channel属性(attr)而非Handler字段,仍能单例化。发散:把状态下沉到调用方上下文,是无状态服务的通用手法。
参考来源
《跟闪电侠学Netty:Netty即时聊天实战与底层原理》第19章《群聊消息的收发及Netty性能优化》