mina2服务器读写事件阻塞

最近用flash + java做一个实时应用,
服务器端用mina2.0.4作为通讯框架,
封装了自己的消息格式,采用byte流的方式进行交互,
在测试过程中,并发量50以下正常运行,
在超过100时,服务器无法正常发送消息,问题描述如下:

以调试模式启动服务器,
此时停止所有客户端,
1,重新连接一个新的客户端,服务端能在sessionOpen中捕获并处理客户连接;
2,服务器只有第一条消息被发出,
跟踪filter,编码解码都正常,
ExecutorFilter的messageReceived成功将解码消息压入tasksQueue,
此时客户端收到第一条消息;
3,当客户端下一个消息到达时,
ExecutorFilter的messageReceived成功将解码消息压入tasksQueue,
但是IoHandler没有触发messageReceived,
在对应的SessionTasksQueue中,可以看到第一条已发送的消息并没有被删除(仍然存在此queue中!),
此后所有此客户端的收发消息都没有正常处理,而线程池并没有run out,也没有检测到线程被挂起,

我使用的是OrderedThreadPoolExecutor,
// 编码解码
chain.addLast("codec", new ProtocolCodecFilter(new FireProtocolCodecFactory()));
// 业务线程
executor = new OrderedThreadPoolExecutor(100, 1000,
5, TimeUnit.SECONDS, Executors.defaultThreadFactory(), null);
chain.addLast("threadPool", new ExecutorFilter(executor));

4,打开minadebug,关键log如下:
正常:
2013-02-18 15:11:53,282 - Adding event SESSION_OPENED to session 2
Queue : [SESSION_OPENED, ]
2013-02-18 15:11:53,316 - Adding event MESSAGE_SENT to session
Queue : [MESSAGE_SENT, ]
2013-02-18 15:11:53,318 - Adding event MESSAGE_SENT to session 2
Queue : [MESSAGE_SENT, , MESSAGE_SENT, ]
2013-02-18 15:12:03,361 - Adding event MESSAGE_RECEIVED to session 2
Queue : [MESSAGE_RECEIVED, ]

异常:
2013-02-18 15:09:03,055 - Adding event SESSION_OPENED to session 114
Queue : [SESSION_OPENED, ]
2013-02-18 15:09:03,056 - Adding event MESSAGE_SENT to session 114
Queue : [MESSAGE_SENT, ]
2013-02-18 15:09:03,056 - Adding event MESSAGE_SENT to session 114
Queue : [MESSAGE_SENT, , MESSAGE_SENT, ]
2013-02-18 15:09:13,113 - Adding event MESSAGE_RECEIVED to session 114
Queue : [MESSAGE_SENT, , MESSAGE_SENT, , MESSAGE_RECEIVED, ]


求指教和探讨,问题如有描述不清晰请指明,谢谢
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值