Apache mina 输出报文大小修改,解决用作http服务客户端接收到数据最大98304的限制

最近做的一个基于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

Apache mina 输出报文大小修改,解决用作http服务客户端接收到数据最大98304的限制的相关文章

TCP Incast 问题TCP INCAST解决思路 应用场景:在集群文件系统内,客户端应用请求某个逻辑数据块(通常情况下一个读数据块大小是1MB),该数据块以条带化方式分别存储在几个存储服务器上,即采用更小的数据片存储(32KB,256KB等),这种小数据片称为服务器请求单元(SRU)。只有当客户端接收到所有的服务器返回的其所请求数据块的SRU后才继续发送出下一个数据块请求,即客户端同时向

TCP INCAST解决思路 应用场景:在集群文件系统内,客户端应用请求某个逻辑数据块(通常情况下一个读数据块大小是1MB),该数据块以条带化方式分别存储在几个存储服务器上,即采用更小的数据片存储(32KB,256KB等),这种小数据片称为服务器请求单元(SRU).只有当客户端接收到所有的服务器返回的其所请求数据块的SRU后才继续发送出下一个数据块请求,即客户端同时向多个存储服务器发起并发TCP请求,且所有服务器同时向客户端发送SRU. 出现的问题: 1)         这种多对一的服务器向客

Apache Mina 入门实例

这个教程是介绍使用Mina搭建基础示例.这个教程内容是以创建一个时间服务器. 以下是这个教程需要准备的东西: MINA 2.0.7 Core JDK 1.5 或更高 SLF4J 1.3.0 或更高 Log4J 1.2 用户: slf4j-api.jar, slf4j-log4j12.jar, 和Log4J 1.2.x Log4J 1.3 用户: slf4j-api.jar, slf4j-log4j13.jar, 和Log4J 1.3.x java.util.logging 用户: slf4j-a

图解Apache Mina

Apache MINA 是一个用于简化开发构建高性能.高可扩展的网络应用框架.通过JAVA NIO在各种传输协议(如:TCP/IP.UDP/IP)上提供抽象的事件驱动异步API Apache MINA可以称为:NIO框架库.服务端客户端框架库.一个网络套接字库 特性 为各种传输协议提供统一API 提供类似servlet filter的过滤链路支持 可定制化线程模型 开箱即用的 SSL · TLS · StartTLS 超载保护和传输流量控制 易于集成(如:与Spring集成) 可平滑过渡到Net

Apache Mina

初步接触RPC通信框架,目前有很多优秀的RPC框架,今天我参考该博文:http://www.cnblogs.com/xuekyo/archive/2013/03/06/2945826.html 学习了Aapche Mina通信框架.博主介绍的非常详细,包括Mina的源码流程,这里通过阅读博主的文章进行了学习记录,方便以后需要时使用. Apache Mina 是一个网络应用程序框架,用来帮助用户简单地开发高性能和高可扩展性的网络应用程序.它提供了一个通过Java NIO在不同的传输例如TCP/IP

网络通信框架Apache MINA

Apache MINA(Multipurpose Infrastructure for Network Applications) 是 Apache 组织一个较新的项目,它为开发高性能和高可用性的网络应用程序提供了非常便利的框架.当前发行的 MINA 版本支持基于 Java NIO 技术的TCP/UDP 应用程序开发.串口通讯程序. Mina 的应用层: 一个设计成熟的开源框架,总是会仅可能的减少侵入性,并在整个项目中找到合适的位置,而不应对整个项目的构架设计产生过多的影响,图 1 就是 MIN

Apache Mina框架实践

1.为什么要用Apache Mina框架 ApacheMina Server 是一个网络通信应用框架,Mina 可以帮助我们快速开发高性能.高扩展性的网络通信应用,Mina 提供了事件驱动.异步(Mina 的异步IO 默认使用的是JAVANIO 作为底层支持)操作的编程模型. 2.ApacheMina框架使用 Mina的执行流程: > IoService:这个接口在一个线程上负责套接字的建立,拥有自己的Selector,监听是否有连接被建立. > IoProcessor:这个接口在另一个线程上

Apache Mina(一)

Apache Mina是一个能够帮助用户开发高性能和高伸缩性网络应用程序的框架.它通过Java nio技术基于TCP/IP和UDP/IP协议提供了抽象的.事件驱动的.异步的API. Mina包的简介: org.apache.mina.core.buffer 用于缓冲区的IoBuffer org.apache.mina.core.serviceorg.apache.mina.transport.* 用于提供连接的service org.apache.mina.core.session 用于提供两端

Apache mina -Processor线程逻辑

Processor 是AbstractPollingIoProcessor 抽象类内部的私有类. Processor 是一个处理I/O输出输出数据流的主要循环主体. Processor 主要工作包括: 1. 优先处理新IoSession 的逻辑处理 2.抖动处理 3.IoSession 的输入输出工作. 新IoSession 的逻辑处理 //循环 private final Queue<S> newSessions = new ConcurrentLinkedQueue<S>();

apache MINA之心跳协议运用

摘要 心跳协议,对基于CS模式的系统开发来说是一种比较常见与有效的连接检测方式,最近在用MINA框架,原本自己写了一个心跳协议实现,后来突然发现MINA本身带有这样一个心跳实现,感于对框架的小小崇拜,在实践的同时研究了一下! MINA TCP/IP SOCKET 心跳 MINA本身提供了一个过滤器类: org.apache.mina.filter.keepalive . KeepAliveFilter ,该过滤器用于在IO空闲的时候发送并且反馈心跳包(keep-alive request/res