`
scholers
  • 浏览: 620451 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

MINA2的一个BUG

阅读更多
   我们知道,在MINA2中,发送和接受时两个独立的工作线程,但是可以设置一个参数,当服务端发送消息之后同步读取客户端的返回:
session.getConfig().setUseReadOperation(true);


近日,采用MINA2(RC)的同步读取方法,发现无法真的同步读取客户端的返回;
场景是:服务端发送一个消息给客户端,需要同步等待客户端的一个消息回执,然后服务端的程序继续执行;
 
sendSession.getConfig().setUseReadOperation(true);
		WriteFuture future = sendSession.write(xmlMsgBean); // 发送数据
		future.awaitUninterruptibly(); // 等待发送数据操作完成
		if (future.getException() != null) {
			throw new AppException(future.getException().getMessage());
		}
		if (future.isWritten()) {
			// 数据已经被成功发送
			logger.debug("数据已经被成功发送");
			ReadFuture readFuture = sendSession.read();
			readFuture.awaitUninterruptibly();
			if (readFuture.getException() != null) {
				throw new AppException(readFuture.getException().getMessage());
			}
			sendSession.getConfig().setUseReadOperation(false);
			return ((XmlMsgBean) readFuture.getMessage()).getStrErrMsg();
		} else {
			// 数据发送失败
			logger.debug("数据发送失败");
		}
  




  后来用GOOGLE搜索了一下,发现在MINA的官网上,老外同样问了一个一模一样的问题,并且提了一个BUG上去,但是目前BUG的状态还是open;
  https://issues.apache.org/jira/browse/DIRMINA-777
 
I'm attempting to perform a synchronous write/read in a demux-based client application with MINA 2.0 RC1, but it seems to get stuck. Here is my code: 

{code} 
public boolean login(final String username, final String password) { 
    // block inbound messages 
    session.getConfig().setUseReadOperation(true); 

    // send the login request 
    final LoginRequest loginRequest = new LoginRequest(username, password); 
    final WriteFuture writeFuture = session.write(loginRequest); 
    writeFuture.awaitUninterruptibly(); 

    if (writeFuture.getException() != null) { 
        session.getConfig().setUseReadOperation(false); 
        return false; 
    } 

    // retrieve the login response 
    final ReadFuture readFuture = session.read(); 
    readFuture.awaitUninterruptibly(); 

    if (readFuture.getException() != null) { 
        session.getConfig().setUseReadOperation(false); 
        return false; 
    } 

    // stop blocking inbound messages 
    session.getConfig().setUseReadOperation(false); 

    // determine if the login info provided was valid 
    final LoginResponse loginResponse = (LoginResponse)readFuture.getMessage(); 
    return loginResponse.getSuccess(); 
} 
{code} 

I can see on the server side that the LoginRequest object is retrieved, and a LoginResponse message is sent. On the client side, the DemuxingProtocolCodecFactory receives the response, but after throwing in some logging, I can see that the client gets stuck on the call to `readFuture.awaitUninterruptibly() `. 

I can't for the life of me figure out why it is stuck here based upon my own code. I properly set the read operation to true on the session config, meaning that messages should be blocked. However, it seems as if the message no longer exists by time I try to read response messages synchronously.

 
Key: DIRMINA-777 
Type:  Bug 
Status:  Open 
Priority:  Blocker 
Assignee: Unassigned 
Reporter: Matt Huggins 
Votes: 0 
Watchers: 0 



2
0
分享到:
评论
8 楼 crazy_joe 2014-08-29  
这问题貌似还是没有解决
7 楼 tianlovv 2013-12-19  
在MINA2中,发送和接受时两个独立的工作线程
这句话不太认同,如果没加executorfilter  read write是在用一个线程里处理的吧

另外你写的那段代码是放在messagereceive方法中的吗
6 楼 panwuhai 2013-04-28  
我不明白你的问题,我用的是mina2.07的,关于你的业务场景是绝对可以实现的。
场景是:服务端发送一个消息给客户端,需要同步等待客户端的一个消息回执,然后服务端的程序继续执行;

超时时间根据网络来定,或者长连接用来不间断的一问一答,人工来判断何时关闭;当服务端session.write()后,客户端执行handler received ,处理自己的业务;然后仍然在这个方法里 session.write();然后session.close;
除非你还要继续一问一答。
另外,服务器session.close后 客户端端自动会关闭该session.
5 楼 scholers 2013-02-27  
从百草园到三味书屋 写道

哥们写的很不错,有兴趣换个工作吗?
4 楼 从百草园到三味书屋 2012-07-24  
3 楼 bcw104 2011-03-31  
有个不太好的解决办法,每次超时后都要关闭session,然后重新建立一个session
2 楼 scholers 2011-03-31  
bcw104 写道
这个bug我也碰到了,
readFutur.await(500, TimeUnit.MILLISECONDS) 超时后下次再读多少次都是超时,decoder里面明明已经out.write(message)了。


这个BUG在2.0.0中仍然没有得到解决。
1 楼 bcw104 2011-03-31  
这个bug我也碰到了,
readFutur.await(500, TimeUnit.MILLISECONDS) 超时后下次再读多少次都是超时,decoder里面明明已经out.write(message)了。

相关推荐

    MINA 2.0.0-M6

    MINA(Multipurpose Infrastructure for Network Applications)是一个高性能、跨平台的网络应用程序框架,主要用于开发网络服务器和客户端应用。MINA提供了高级的网络通信抽象层,简化了开发人员处理低级别I/O操作...

    mina-2.0.4 source code

    Apache MINA(Multipurpose Infrastructure for Network Applications)是一个高度可扩展的、高性能的Java网络应用程序框架,主要用于构建服务器端应用。MINA利用Java的非阻塞I/O(Non-blocking I/O, NIO)模型,为...

    mina-2.0.0-M3.zip

    M3是预发布版本,意味着它是在正式稳定版2.0.0之前的一个里程碑版本,可能包含一些新功能、改进和bug修复。这个压缩包为开发者提供了一个全面了解和使用MINA框架的机会。 描述中的"源码,文档,jar包 全部包括"表明...

    apache下的mina框架

    Apache MINA(Multipurpose Infrastructure for Network Applications)是一个高度可扩展且功能强大的网络应用程序框架,主要应用于Java平台。MINA的设计目标是简化网络编程,提供一套简单但强大的API,使得开发者...

    使用mina框架实现cmpp2.0服务端

    Mina(Java Minimal Asynchronous Network Library)是一个用Java编写的网络通信库,主要用于构建高性能、高可用性的网络服务器。它提供了一种简单而强大的API,用于处理TCP/IP和UDP/IP协议,以及SSL/TLS加密的网络...

    mina2.0.9下载

    Apache MINA(Multipurpose Infrastructure for Network Applications) 是 Apache 组织一个较新的项目,它为开发高性能和高可用性的网络应用程序提供了非常便利的框架。当前发行的 MINA 版本支持基于 Java NIO 技术的...

    最新 mina框架jar包以及资源文件

    7. **版本更新**:"最新 Apache MINA 2.0.7"表示这是MINA框架的一个稳定版本,可能包含了之前版本的bug修复、性能优化和新特性,确保了更好的稳定性和兼容性。 在实际开发中,你可以使用这些jar包和资源文件来构建...

    MINA-2.0.0-M4 英文版

    MINA(Multipurpose Infrastructure for Network Applications)是一个高性能、异步事件驱动的网络应用程序框架,用于构建高并发、高性能的服务器端和客户端应用。这个框架主要针对TCP和UDP协议,但也可以支持其他I/...

    mina-touch:mina-touch,一个方便、轻量的小程序手势事件监听库

    mina-touch,一个方便、轻量的 小程序 手势事件监听库 事件库部分逻辑参考alloyFinger,在此做出声明和感谢 change log: 2019.03.10 优化监听和绘制逻辑,动画不卡顿 2019.03.12 修复第二次之后缩放闪烁的 bug,...

    mina高性能Java网络框架 v2.0.23.zip

    Apache MINA(Multipurpose Infrastructure for Network Applications)是一个高性能的Java网络框架,主要设计用于构建网络应用,如服务器和客户端通信。MINA的核心理念是提供一个与传输协议无关的抽象层,使得...

    mina高性能Java网络框架 v2.2.1.zip

    Apache MINA(Multipurpose Infrastructure for Network Applications)是一个高性能、异步事件驱动的网络应用程序框架,主要用Java语言编写。MINA旨在简化开发网络服务,如TCP/IP和UDP/IP协议的应用,如FTP、SMTP、...

    基于Java的源码-高性能Java网络框架 MINA.zip

    apache-mina-2.0.5是MINA框架的一个稳定版本,包含了对Java NIO的优化和改进,以及一些bug修复和新功能的添加,如更完善的SSL/TLS支持,进一步提升了安全性。 总的来说,MINA是一个强大的Java网络框架,它简化了...

    MINA框架用到的开发包

    这个版本是2.0.0的预发布版本M4,意味着它是正式版本前的一个测试版,可能包含一些新功能或者bug修复。在MINA框架中,核心库提供了非阻塞I/O(NIO)的支持,包括缓冲区管理、事件驱动模型、过滤器链等,使得开发者...

    交通部809协议源码(java开发,基于apache-mina框架)

    分享出来主要就是看不惯太多做这个还收费的(收费就算了,有些还骗人,自己也不是大拿,如果有BUG可以反馈给我,我尽力改)。自己赚点积分下载其他资源用,实在没积分下载的可以留言邮箱,博主不定时发邮件。

    mina:使用Apache MINA在Java中进行分布式并行计算

    我已经包含了一个100 DummyWorkUnits的测试。 这些只是等待几秒钟然后停止的作业。 作业编号6配置为在运行时引发异常。 要启动服务器,请运行编译脚本。 这将编译所有类并启动服务器。 然后,使用compile2脚本在...

    JAVA NIO MINA2调用大宝CA密码安全套件实现国密SSL安全通道,1.0.1版本,含通信示例代码

    使用方法见:https://blog.csdn.net/upset_ming/article/details/96491058 1. 修改了前一版本中证书验证的bug,支持JDK8的高版本 2. 支持国密SSL双向认证 3. 将过期的国密证书替换为新证书

    mian-2.0.3

    Apache MINA 是一个高度可扩展且高性能的网络应用程序框架,主要设计用于简化网络协议开发,尤其是TCP/IP和UDP/IP协议的实现。MINA 提供了一种抽象层,使得开发者可以专注于编写业务逻辑,而无需关心底层网络通信的...

    herald-discussion-room-mina:「小猴答疑室」微信小程序

    执行以下操作前请确保正确安装了:Node.js 环境微信开发者工具(bug很多,注意保持更新)一个得心应手的文本编辑工具(不要用微信开发者工具当编辑器)安装 wepy在终端中执行:npm install wepy-cli -g如果安装遇到...

    Apache FtpServer 1.0.6

    Apache FtpServer是一个100%纯Java的、基于现有开放式协议基础上、完整、小巧的FTP服务器。此外,FtpServer还可以作为Windows服务器、Unix / Linux后台程序或是被嵌入在Java应用程序而独立运行。有了MINA...

Global site tag (gtag.js) - Google Analytics