ProtocolCodecFilter

为什么要用ProtocolCodecFilter

因为TCP协议保证所有的包按顺序送达,但它不保证发送方的写操作与接受方的读操作一一对应。具体到MINA中,在不使用ProtocolCodecFilter的情况下,发送方一次调用IoSession.write(Object message) 有可能多次触发接受方的messageReceived(IoSession session, Object message) 事件,也有可能发送方多次调用IoSession.write(Object message),而接受方只触发一次 messageReceived(IoSession session, Object message)事件,当你的客户端和服务端运行在同一台机器上或者运行在同一个子网的时候,你可能不会遇到这个问题,但是你的应用应该支持这种情况

 

你也可以在IoHandler实现这些逻辑,但是使用ProtocolCodecFilter可以让你的代码更干净也更容易理解。

 

 

怎么用

假设你的程序只需要接受一些byte数据,并且把这些数据转换成消息(比较高级的对象)

通常来说有三种方法把字节流转换成消息:

1.使用定长的消息

2.使用定长的消息头,并用它指明消息体的长度

3.使用分隔符,比如许多基于文本的协议都使用回车换行(CR LF  /r/n)作为消息的结尾

在我们的文档中将使用第一和第二中方法,因为他们实现起来比较简单,以后我们会介绍怎么使用分隔符

 

范例

我们将会编写一个(很废柴的)图片字符统计服务器(graphical chargen server 手头字典不行没查出来啥意思乱写的)来展示如何编写你自己的协议编码解码程序(ProtocolEncoder, ProtocolDecoder, and ProtocolCodecFactory)。

 

协议很简单,看起来就是下面这个样子的

 

4byte4byte4byte
widthheightnumchars

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值