多语言展示
当前在线:558今日阅读:138今日分享:34

Netty如何用序列化框架Marshalling读写对象数据

在前面关于Netty使用的经验分享中读写的全部是字符串信息(文本类数据),本篇经验将分享一下Netty中如何通过序列化框架 Marshalling 来直接发送和接受对象数据(二进制数据)。注意:本篇经验会使用如下两篇经验构建的Netty服务端和客户端工程。0如何通过Netty开发基于NIO的客户端程序0如何通过Netty开发基于NIO的服务端程序
工具/原料
1

Eclipse

2

Netty5.0

方法/步骤
1

修改客户度和服务端工程的pom.xml文件,引入 Marshalling 的相关依赖图1示:服务端工程引入 Marshalling 的相关依赖图2示:同样,客户端工程引入 Marshalling 的相关依赖(和服务端相同)

2

客户端和服务端分别创建Marshalling编码器和解码器构建类图1示:服务端工程创建Marshalling序列化工具类,并编写对象的编解码方法图2示:同理,客户端工程创建Marshalling序列化工具类(和服务端相同),并编写对象的编解码方法

3

客户端和服务端分别创建请求消息类和响应消息类图1示:服务端工程创建请求消息类,服务端会接受客户端发送的该请求类对象图2示:服务端工程创建响应消息类,服务端会将该响应类对象发送到客户端图3示:同理,将上述两个类完整拷贝到客户端即可,客户端会创建请求类对象并发送给服务端,并接受服务端发送的响应类对象

4

服务端添加对象编解码事件处理器并修改自定义事件处理器图1示:服务端在事件处理责任链中添加Marshalling相关的编解码对象,他们均继承了 ChannelHandlerAdapter 类。图2示:服务端自定义事件处理器接收的数据就是自定义的请求消息类对象,并构建发送自定义的响应消息类对象。

5

客户端添加对象编解码事件处理器并修改自定义事件处理器图1示:客户端的Netty事件处理责任链中添加Marshalling相关的编解码对象图2示:客户端自定义事件处理器中接受的服务端响应事件是自定义的响应消息类对象

6

修改客户端主方法中的发送消息部分图示,客户端主方法中不再从控制台接受用户输入数据进行发送,而是直接构建一个自定义请求消息类对象,并发送给服务端。

7

分别启动服务端和客户端进行测试图1示:服务端控制台的输出图2示:客户端控制台的输出

8

步骤总结1. 创建用于构建 Marshalling 编解码器对象的工具类2. 创建自定义的请求类和响应类,均需要实现 Serializable 接口3. 在服务端和客户端的事件处理责任链中添加 Marshalling 的编解码器对象,两者均继承了 ChannelHandlerAdapter 类

推荐信息