`

apache mina 同步接收客户端消息

    博客分类:
  • MINA
阅读更多

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

Java代码  收藏代码
  1. session.getConfig().setUseReadOperation(true);  



近日,采用MINA2(RC)的同步读取方法,发现无法真的同步读取客户端的返回; 
场景是:服务端发送一个消息给客户端,需要同步等待客户端的一个消息回执,然后服务端的程序继续执行; 
 

Java代码  收藏代码
  1. sendSession.getConfig().setUseReadOperation(true);  
  2.         WriteFuture future = sendSession.write(xmlMsgBean); // 发送数据  
  3.         future.awaitUninterruptibly(); // 等待发送数据操作完成  
  4.         if (future.getException() != null) {  
  5.             throw new AppException(future.getException().getMessage());  
  6.         }  
  7.         if (future.isWritten()) {  
  8.             // 数据已经被成功发送  
  9.             logger.debug("数据已经被成功发送");  
  10.             ReadFuture readFuture = sendSession.read();  
  11.             readFuture.awaitUninterruptibly();  
  12.             if (readFuture.getException() != null) {  
  13.                 throw new AppException(readFuture.getException().getMessage());  
  14.             }  
  15.             sendSession.getConfig().setUseReadOperation(false);  
  16.             return ((XmlMsgBean) readFuture.getMessage()).getStrErrMsg();  
  17.         } else {  
  18.             // 数据发送失败  
  19.             logger.debug("数据发送失败");  
  20.         }  
  21.     





  后来用GOOGLE搜索了一下,发现在MINA的官网上,老外同样问了一个一模一样的问题,并且提了一个BUG上去,但是目前BUG的状态还是open; 
  https://issues.apache.org/jira/browse/DIRMINA-777 
 

Java代码  收藏代码
  1. 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:   
  2.   
  3. {code}   
  4. public boolean login(final String username, final String password) {   
  5.     // block inbound messages   
  6.     session.getConfig().setUseReadOperation(true);   
  7.   
  8.     // send the login request   
  9.     final LoginRequest loginRequest = new LoginRequest(username, password);   
  10.     final WriteFuture writeFuture = session.write(loginRequest);   
  11.     writeFuture.awaitUninterruptibly();   
  12.   
  13.     if (writeFuture.getException() != null) {   
  14.         session.getConfig().setUseReadOperation(false);   
  15.         return false;   
  16.     }   
  17.   
  18.     // retrieve the login response   
  19.     final ReadFuture readFuture = session.read();   
  20.     readFuture.awaitUninterruptibly();   
  21.   
  22.     if (readFuture.getException() != null) {   
  23.         session.getConfig().setUseReadOperation(false);   
  24.         return false;   
  25.     }   
  26.   
  27.     // stop blocking inbound messages   
  28.     session.getConfig().setUseReadOperation(false);   
  29.   
  30.     // determine if the login info provided was valid   
  31.     final LoginResponse loginResponse = (LoginResponse)readFuture.getMessage();   
  32.     return loginResponse.getSuccess();   
  33. }   
  34. {code}   
  35.   
  36. 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() `.   
  37.   
  38. 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  

分享到:
评论

相关推荐

    mina 同步客户端,异步客户端

    它负责监听指定的网络端口,接收客户端的连接请求,并为每个连接创建一个Session。Session是MINA的核心概念,它代表了服务端与客户端之间的一个连接实例。服务端通过定义Filter Chain(过滤器链)来处理接收到的数据...

    mina客户端例子

    Apache MINA(Multipurpose Infrastructure for Network Applications)是一个高度可扩展且功能丰富的网络应用程序框架,主要用于简化开发高性能且异步的网络应用。MINA提供了一种统一的API,无论是TCP还是UDP,...

    mina聊天室

    服务端接收到数据后,同样会触发读取事件,我们可以在此处理接收到的消息,并广播给其他在线用户。 在mina聊天室的实现中,可能会遇到的问题包括: 1. **并发控制**:随着在线用户的增加,服务端需要处理更多的...

    深入理解Mina

    5. **IoService** 和 **IoAcceptor/IoConnector**: IoService是服务端和客户端的抽象,IoAcceptor用于接收客户端连接,IoConnector则用于发起连接到远程服务器。 6. **Thread Model**: Mina允许开发者自定义线程...

    Android MiNa 通讯实现

    - **Acceptor**: 服务器端接收客户端连接的组件。 - **Session**: 表示客户端与服务器之间的连接,管理读写操作。 - **Handler**: 处理网络事件的接口,如连接建立、数据读写等。 - **ProtocolDecoder/Encoder**: ...

    MINA中文教程

    1. **计算器服务**:MINA可以轻松构建一个简单的网络计算器服务,客户端发送计算请求,服务器端接收到请求后进行计算并返回结果。这个示例展示了MINA的基本使用,包括创建ServerBootstrap、设置过滤器链、定义...

    Android端集成Mina框架实现长连接,完美解决断线重连问题,修复断线重连打开多端口问题.zip

    Acceptor负责监听指定端口,接收客户端的连接请求;Connector则用于建立到服务器的连接。在Android端,由于系统特性,可能需要处理权限问题,确保应用有访问网络的权限。 断线重连机制是解决网络不稳定情况下的必备...

    通信规约和mina通信程序

    Apache MINA(Model-View-Controller for Network Applications)是一个高性能、异步的网络应用程序开发框架。它允许开发者以事件驱动的方式处理网络I/O操作,提高了系统性能。MINA支持多种传输类型,包括TCP/IP、...

    mina高性能Java网络框架.zip

    MINA(Multi-purpose Infrastructure for Network Applications)是一个高度可扩展的、高性能的Java网络应用框架,由Apache软件基金会开发并维护。它为开发者提供了简单、高效的API来处理网络通信,尤其是在TCP/IP和...

    即时通讯源码

    3. **客户端开发**:客户端通常需要实现与服务端的连接、身份验证、消息发送和接收等功能。JavaFX或Swing可以用于构建桌面应用,而Android SDK则用于移动端开发。 4. **消息传输**:在Java中,可以使用对象序列化或...

    类似QQ的聊天工具

    1. **Java编程**:Java提供了丰富的库和框架,如Swing或JavaFX用于构建用户界面,Socket编程用于网络通信,以及像Apache MINA或Netty这样的NIO框架来优化高并发连接。通过Java,开发者可以构建稳定、高效的客户端...

    Android长连接

    MINA(Multipurpose Infrastructure for Network Applications)是Apache软件基金会的一个开源项目,提供了一个可扩展的网络应用框架,用于简化跨平台的网络编程,尤其是TCP和UDP协议的应用。MINA对于实现Android...

    java IM即时通讯

    2. Mina:Apache Mina是一个网络通信框架,提供了一组高度模块化的组件,可以方便地构建高性能的TCP/IP和UDP服务,适用于开发IM服务器。 3. Netty:Netty是一个高性能、异步事件驱动的网络应用程序框架,适用于快速...

    gameLogDBServer:引用https

    2. **服务端模块**:接收客户端发送的游戏日志,利用Disruptor进行消息缓存,避免直接写入数据库导致的性能问题。 3. **数据库处理模块**:由单独的线程负责,从Disruptor的缓冲区取出日志消息,转化为SQL语句,通过...

    Java即时通信工具(JICQ)设计文档(PPT)JAVA

    - **会话模块**:实现一对一和群组聊天功能,包括消息发送、接收、存储和同步。 - **联系人管理模块**:存储和查找联系人,显示在线状态,管理好友列表。 - **文件传输模块**:支持文件发送和接收,可能涉及断点...

    深度解析java游戏服务器开发.zip

    首先,Java作为一种跨平台的编程语言,拥有丰富的库和框架支持,如Netty、Apache MINA等,这些都为游戏服务器的开发提供了便利。Netty是一个高性能的异步事件驱动的网络应用程序框架,适用于开发服务器和客户端应用...

    基于Android平台简易即时通讯的研究与设计

    Openfire的插件机制允许扩展以与其他通讯软件互操作,使用Apache Mina框架提供高性能的网络连接和异步I/O处理。 即时通讯在Android上的实现需要考虑网络条件、性能优化、用户体验和安全防护等多个方面。通过合理的...

    Chat-engine:java中的多线程聊天引擎

    8. **框架与库**: 为了简化开发,Chat-engine可能使用了如Spring Framework、Netty或Apache Mina等网络通信框架,它们提供了高级抽象和性能优化,使开发者能专注于业务逻辑而不是底层细节。 9. **安全性**: 考虑到...

    JAVA上百实例源码以及开源项目源代码

     在对象创建的过程中将被容器调用,onMessage函数方法接收消息参数,将其强制转型为合适的消息类型,同时打印出消息的内容。同时一个mail note将被发送给消息发送者,发送一个e-mail通知给由recipient参数确定的e-...

    JAVA上百实例源码以及开源项目

     在对象创建的过程中将被容器调用,onMessage函数方法接收消息参数,将其强制转型为合适的消息类型,同时打印出消息的内容。同时一个mail note将被发送给消息发送者,发送一个e-mail通知给由recipient参数确定的e-...

Global site tag (gtag.js) - Google Analytics