RPC框架(3)——服务端基本骨架搭建

139 阅读1分钟

1、结合Netty封装的接口,实现一个应用的启动部分

  • 基本字段:

image.png

  • 开启方法:

image.png

  • 注册服务

image.png

2、解决粘包、拆包问题

在数据传输过程中,相邻的两个数据包可能会完全粘合在一起,所以需要针对这种情况,做拆包处理。主要方法有三种:

  • 固定长度文本传输:提前制定好每次请求的报文长度,假设一份数据报文的规定长度为9个字节,那么服务端每当接收满了9个字节,才会当作数据包传输完整。

  • 特殊分割字符传输:规定好每次传输的数据报文需要用统一的分割字符来进行划分。

  • 固定协议传输:定义好相关的传输协议体,服务端会将接收的数据流信息转换为协议体,当协议体转换一旦成功,就代表数据包发送完整了、

此处利用固定长度文本传输的原理,自定义了一个传输协议:

image.png 其中,核心数据可以另外再建立一个对象,存放数据,方便后期对其进行扩展

image.png

3、加码、解码器的设计

加码简单,直接继承MessageToByteEncoder类,重写encode方法即可 :

image.png

解码器却需要一些额外的操作:

  • 防止接收到过大的包

image.png

  • 验证魔数,判断发来的请求适合合法

image.png

  • 当最后的数据包长度不够的时候,说明剩下的数据包不完整,需要重置下读索引

image.png

4 ServerHandler的设计(核心操作部分)

服务器处理程序,当数据传输到这里的时候,就已经变为我们所设计好的数据格式了—(RpcProtocol)

image.png