2.0以下mina信息接收不全解决方案

接收不全是因为readBufSize不够,会分批接收。。
作为业务来说不好分析。

1.将一次session所有 接收的wrap起来。。


public void messageReceived(IoSession session, Object message) throws Exception {
//根据下面的值 循环把接收的消息收集起来,然后组成整个消息,不过这种做成多线程的话会有一些问题
接收过来的消息可能不会按顺序接收,一般不会有问题

totalSize= session.getReadBytes() 消息体的整体长度 例如 10k
message 的len 每次接收的大小 例如 1k,2k,4k,2k



2.hack session的API,Iosession实现类org.apache.mina.transport.socket.nio.SocketSessionImpl 其实是有私有方法
我们可以反射hack一下。

public void sessionCreated(IoSession session) throws Exception {
super.sessionCreated(session);


//一次读的缓存大小,不然消息会分批接收
hackReadBufSize(session, 8* 1024);
}

/**
* hack无权限类相关域
*/
private void hackReadBufSize(IoSession session, int readBuf) {
try {
Method method = session.getClass().getDeclaredMethod("setReadBufferSize", int.class);

method.setAccessible(true);

method.invoke(session, readBuf);

} catch (Exception e) {

}
}



如此而已。。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值