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);}}