读书人

MINA2收包中对粘包的处置

发布时间: 2012-08-28 12:37:01 作者: rapoo

MINA2收包中对粘包的处理
MINA2中(MINA2 RC版本,MINA2.0正式版已经发布)服务端接受数据默认有一定长度的缓冲区(可以在启动的时候设置)。那么对于大报文,怎么处理呢?比如说超过1024,甚至更多?MINA2为了节省网络流量,提高处理效率,会将大报文自动拆分(可能是存放MINA2中的缓冲区里面):比如2048字节的报文,就会拆分成两次;那么在接受的时候,就有一个如何判断是完整报文的问题,或者说是一个拆包组包的问题。
MINA2中初始化服务的时候是可以设置输入和输出的缓冲区的:

private class Context {private final CharsetDecoder decoder;private IoBuffer buf;private int msgLength = 0;private int overflowPosition = 0;/** *  *  */private Context() {decoder = charset.newDecoder();buf = IoBuffer.allocate(80).setAutoExpand(true);}/** *  *  * @return CharsetDecoder */public CharsetDecoder getDecoder() {return decoder;}/** *  *  * @return IoBuffer */public IoBuffer getBuffer() {return buf;}/** *  *  * @return overflowPosition */public int getOverflowPosition() {return overflowPosition;}/** *  * * @return matchCount */public int getMsgLength() {return msgLength;}/** *  *  * @param matchCount *            报文长度 */public void setMsgLength(int msgLength) {this.msgLength = msgLength;}/** *  *  */public void reset() {this.buf.clear();this.overflowPosition = 0;this.msgLength = 0;this.decoder.reset();}/** *  * @param in *            输入流 */public void append(IoBuffer in) {getBuffer().put(in);}}

读书人网 >软件架构设计

热点推荐