apache mina中写的过程分析

本文探讨Apache Mina作为网络应用框架在处理IO时的写操作,特别是多请求写处理和分片策略。分析了从AbstractPollingIoProcessor.flush开始的处理流程,包括flush、flushNow、writeBuffer和write等关键函数的功能和作用,详细阐述了如何高效地处理多个session的写操作及不同状态的管理。
摘要由CSDN通过智能技术生成

apache mina作为一个网络应用框架,经常被用作消息系统中,也就是说经常要去处理IO,因此要实现高效的写和读。
最近又看了看写的处理,始终发现不能完全的理解他的处理思路。

涉及的类
先看一下写操作中涉及的类。

分析过程
从最底下的AbstractPollingIoProcessor.flush来分析

在mina的处理流程中,当Processor接受到可以写可以读的Sessions后,会将他们加入到flush队列,而
AbstractPollingIoProcessor.flush就是flush的具体实现。

AbstractPollingIoProcessor.flush的大致流程如下:
do
从flushSessions队列中取出session

 
 
 
判断session的状态,如果是OPENED,那么进行flushNow处理;
如果是关闭状态,那么就跳过;
如果是打开中,那么就加入到flushSessions队列中。

while(flushSessions队列不为空)

上述流程中对于每个session的flush处理主要的过程是这样:

flushNow:


  
  
  
final boolean hasFragmentation = session.getTransportMetadata().hasFragmentation();
 
final WriteRequestQueue writeRequestQueue = session.getWriteRequestQueue();
 
// Set limitation for the number of written bytes for read-write
// fairness. I used maxReadBufferSize * 3 / 2, which yields best
// performance in my experience while not breaking fairness much.
final int maxWrittenBytes = session.getConfig().getMaxReadBufferSize()
+ (session.getConfig().getMaxReadBufferSize() >>> 1);
int writtenBytes = 0;
WriteRequest req
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值