协议设计、解析

HttpServerCodec

public final class HttpServerCodec
extends CombinedChannelDuplexHandler<HttpRequestDecoder,HttpResponseEncoder>
implements HttpServerUpgradeHandler.SourceCodec

1、HttpRequestDecoder、HttpResponseEncoder 的组合,使服务器端的 HTTP 实现更加容易

2、作为服务器端的解码器、编码器,同时为入站、出站处理器

3、服务器负责处理请求并响应浏览器。所以只需要处理 HTTP 请求即可

 

自定义协议

1、组成要素

(1)魔数:判定接收的数据是否为无效数据包

(2)版本号:可以支持协议的升级

(3)序列化算法:消息正文所采用的序列化 / 反序列化的方式

(4)指令类型:与业务相关

(5)请求序号:为双工通信,提供异步能力

(6)正文长度

(7)消息正文

2、继承 ByteToMessageCodec

(1)一个编解码器,用于对字节到消息进行即时编码 / 解码,反之亦然

(2)这可以被认为是 ByteToMessageDecoder 和 MessageToByteEncoder 的组合

(3)请注意,ByteToMessageCodec 的子类一定不要用 @Sharable 来注释

 

@ChannelHandler.Sharable

1、表示被注解的 ChannelHandler 的同一个实例,可以被多次添加到一个或多个 ChannelPipeline 中,而不会出现竞争情况

2、如果没有指定这个注解,那么每次将其添加到管道中时,都必须创建一个新的 handler 实例,因为它有不共享的状态,如成员变量

3、只有带有该注解,才能通过对象的方式被共享,否则无法被共享

4、需要考虑共享该 handler 后是否线程安全

(1)该 handler 数据拥有非完整数据时,如果共享则会出现问题

(2)如果为被处理过的完整数据,那么被共享也就不会出现问题

posted @   半条咸鱼  阅读(48)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
点击右上角即可分享
微信分享提示