MINA客户端接收响应信息时出现不完整现象
在一个金融项目中采用MINA开发一套转换系统,但遇到一个问题。问题是这样的,在客户端向服务器端发起请求,服务端是别家公司的系统,返回的结果报文有点大,这时在MINA客户端接收报文时,总是出现数据接收不完整的现象。由于各种原因没能解决这个问题。还请哪位MINA达人给指点迷津。测试观察发现,在接收响应报文时总是先接收一个2048,然后,在接收剩余的报文,但接收的过程中会出现接收不完整的现象,由于报文是XML的格式,dom4j来解析XML报文不完整就出现异常了。在此先谢谢各位了。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(8)
这样做于公于私都是有好处的!自己学了知识,同时公司也少了些麻烦!
嗯,貌似你这个比我做的要负责点!
请教,我在使用了CumulativeProtocolDecoder的派生子类处理了报文,后续的处理也在这个类里,会不会对这个类的代码造成污染,而不纯粹是一个解码类了。如果不在这里完成后续跳出该怎么得到具体的报文呢?谢谢!
在decoder中处理,还是在hander中处理message,是你的设计问题了,跟mina就没啥关系了~
在WINXp环境测试是可以收完整的报文信息,但是把程序放到测试环境服务器(SUSE-Linux)上就会的不到完整报文了呢?还请指点一二。
回复
@悠然居士 : 大神你的问题怎么解决的啊我接收的信息也不完整
回复
已经过去很久了,就当是的问题记忆也不是很清晰了。单从问题上讲就是拆包、粘包问题,在报文前加上一个长度,在服务端Decoder解析的时候先读取固定位数的长度,然后再读取这个长度的消息。把多余的或者不够本次处理的搁置,待接收完整后再做处理,可以根据业务逻辑具体实现等待、或是抛弃。不知道能否帮到你供参考。
用累积协议解码器(CumulativeProtocolDecoder)作为基类派生子类处理报文,接收完整再切断缓冲区,就不会出现这样的问题了