1、结合Netty封装的接口,实现一个应用的启动部分
- 基本字段:
- 开启方法:
- 注册服务
2、解决粘包、拆包问题
在数据传输过程中,相邻的两个数据包可能会完全粘合在一起,所以需要针对这种情况,做拆包处理。主要方法有三种:
-
固定长度文本传输:提前制定好每次请求的报文长度,假设一份数据报文的规定长度为9个字节,那么服务端每当接收满了9个字节,才会当作数据包传输完整。
-
特殊分割字符传输:规定好每次传输的数据报文需要用统一的分割字符来进行划分。
-
固定协议传输:定义好相关的传输协议体,服务端会将接收的数据流信息转换为协议体,当协议体转换一旦成功,就代表数据包发送完整了、
此处利用固定长度文本传输的原理,自定义了一个传输协议:
其中,核心数据可以另外再建立一个对象,存放数据,方便后期对其进行扩展
3、加码、解码器的设计
加码简单,直接继承MessageToByteEncoder类,重写encode方法即可 :
解码器却需要一些额外的操作:
- 防止接收到过大的包
- 验证魔数,判断发来的请求适合合法
- 当最后的数据包长度不够的时候,说明剩下的数据包不完整,需要重置下读索引
4 ServerHandler的设计(核心操作部分)
服务器处理程序,当数据传输到这里的时候,就已经变为我们所设计好的数据格式了—(RpcProtocol)