学习Android推送功能笔记(6)---Mina--CodecFactory自定义和一点别的扩展

来源:互联网 发布:畅言教学软件 编辑:程序博客网 时间:2024/06/05 09:03

学习了Mina的自定义CodcFactory(自定义加解码器)

  • 第一步:新建一个MyCodecFactory类并实现 ProtocolCodecFactory接口,实现必须的方法getDecodergetEncoder方法,Decorder就是解码器,Encoder就是加码器
    这两个要自己编写.
  • 第二步:新建MyEncoder类和MyDecoder类,分别实现ProtocolEncoderProtocolDecoder接口.其中主要实现的方法分别为encode和’decode’
    public void encode(IoSession session, Object message, ProtocolEncoderOutput out)throws Exception 

该方法的参数,session表示会话,传送过来的会话封装一些信息参数,message表示要发送的消息,out 表示被封装后的输出流,消息处理好后用out发出,decode与此类似

防止数据丢失

现在客户端所有的消息都是添加了一个\n然后发送到服务端的,服务端根据发送过来的字符串解析遇到”\n”才会读取, 如果没有\n,那么服务器是不会读取的,再次接收到导游”\n”的数据,那么上一个带有”\n”的消息就会丢失,
Mina为了处理这种情况自带了一个Decoder类叫做CumulativeProtocolDecoder顾名思义累积的解码器,也就是说,上次没有输出的信息会累加到下次遇到”\n”,当然,”\n”只是在本例中,我们可以根据自己的情况而定.

protected boolean doDecode(IoSession session, IoBuffer in,
ProtocolDecoderOutput out) throws Exception

可见这个方法跟ProtocolEncoder最明显的区别就是这个方法有个bool类型的返回值,这个值代表如果确实通过out输出了,则返回true,否则返回false,返回false,数据不会丢失,累加到下次输出.

实际用处

  • 比如一段XML很长,可能一开始发送了<aa>接着有发送了一段具体的内容<body>hello<body>之类的,那么就要用到cumulativeProtocolDecoder了等

Client使用Mina

建立的时NioSocketConnector,Handler也要用,以及ProtocolCodercFiliter,socketAddress,传输数据还是用session

0 0