最近做的一个基于mina的application,用http服务里管理,http服务也是mina实现的,运行时发现,如果http返回的数据大于
98304,客户端将接收不完全折腾了2天,才发现mina每次发送的报文大小是98304,我没有找到多次发送的方法,也不确定多次发送会不会被客户端多次接收到,最后参考了一些资料后,想办法修改了这个大小,你首先要知道你要送的数据的总大小,我实现的方法是HttpResponseMessage里面增加一个总大小,在HttpResponseEncoder (MessageEncoder)里面的encode房方法里面的buf.flip修改为:
msg.setTotal(buf.position());//即设置总大小为实际的数据的大小
buf.flip().shrink();
然后在发送修改发送数据的地方:
int s = session.getConfig().getMaxReadBufferSize(); WriteFuture wf; wf = session.write(response);//必须先调用这个,encoder才会被调用,才能设置到总大小,下面才能取到 int t = response.getTotal(); if(t>s*1.5){//发送缓冲大小是读取缓冲的1.5倍 int new_s =(int) (Math.ceil( t /1.5) + 24); session.getConfig().setMaxReadBufferSize(new_s);//设置为足够大 } wf.setWritten(); wf.awaitUninterruptibly(); if (!wf.isDone()) { System.out.printf("not send -------------------------------------------\n"); }
总觉得我的方法很土,但管用,求高手
我的群,群名称是: PHPer&页游&Mobile&U3D 2D
群号:95303036
加群除了提问之外,请记得帮助别人,谢谢。
----------------------------------再发个广告。点图进入,支持下我朋友。
群名称是: PHPer&页游&Mobile&U3D 2D
群号:95303036
加群除了提问之外,请记得帮助别人,谢谢。
----------------------------------再发个广告,网上买家具便宜1/4,还包邮。点图进入,支持下我老婆。
时间: 2024-09-29 18:48:39