`
jianFengGong
  • 浏览: 20474 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

MIAN2客户端与spring的整合

    博客分类:
  • JAVA
阅读更多
项目中遇到要在Java web项目中使用mina2客户端,并且是一个常连接。尝试了将其整合到web项目中。以下是部分代码实现。
1.ProcessHandler.java

public class ProcessHandler extends IoHandlerAdapter {
private String hostName ;
//MINA2 服务器 IP 数组
private static final String[] HOSTS = {"",""};
private static final int CONNECT_TIMEOUT = 1000;
private NioSocketConnector connector;
private static final int PORT = 1234;
private IoSession session;
private ConnectFuture future;
// 构造方法
public ProcessHandler () {

   this.hostName = this.selectServer();
}
// 随机选择 MINA2 服务器 IP,以实现 MINA2 集群
private String selectServer() {
try {
int cc = HOSTS.length;
if (cc <= 0)
return null;
Random rd = new Random();
int idx = (Math.abs(rd.nextInt()) % cc);
return HOSTS[idx];
} catch (Exception e) {
e.printStackTrace();
return null;
}
}

public IoSession connect() {
if (session != null && session.isConnected()) {
return session;
}
try {
connector = new NioSocketConnector();
connector.setConnectTimeoutMillis(CONNECT_TIMEOUT );
connector.getFilterChain().addLast( "codec",
  (IoFilter) new ProtocolCodecFilter(
  new ObjectSerializationCodecFactory()));
connector.getFilterChain().addLast("logger", new LoggingFilter());
connector.setHandler(this);
future = connector.connect(new InetSocketAddress(hostName, PORT ));
future.awaitUninterruptibly();
if (!future.isConnected()) {
return null;
}
session = future.getSession();
} catch (Exception ex) {
throw new IllegalStateException("session is already closed");
}
return session;
}

@Override
public void sessionOpened(IoSession session) throws Exception { 
   
System.err.println("open");


@Override 
public void messageReceived(IoSession session, Object message) 
        throws Exception { 
    System.out.println("批复:" + message.toString()); 


@Override 
public void messageSent(IoSession session, Object message) throws Exception {
    System.out.println("报告:" + message.toString()); 


@Override 
public void exceptionCaught(IoSession session, Throwable cause) 
        throws Exception { 
    cause.printStackTrace(); 
    session.close(true); 
}
}

2.applicationContext.xml
<bean id="ProcessHandler" name="ProcessHandler" class="com.dong.web.utils.ProcessHandler"/>

3.ApplicationContextListener.java
@WebListener
public class ApplicationContextListener implements ServletContextListener {

public void contextInitialized(ServletContextEvent servletContextEvent) {

WebApplicationContext wac = WebApplicationContextUtils
.getRequiredWebApplicationContext(servletContextEvent
.getServletContext());
ProcessHandler handler  = (ProcessHandler) wac.getBean("ProcessHandler");
IoSession ioSession = handler.connect();
wac.getServletContext().setAttribute("iosession", ioSession);

}

public void contextDestroyed(ServletContextEvent event) {
event.getServletContext().setAttribute("iosession", null);
}
4.使用时只要从ServletContext中获取iosession,便可以向minaServer发送数据。

0
0
分享到:
评论

相关推荐

    redis安装包(windows版)及客户端

    一、Redis的特性与功能 1. 高性能:Redis是基于内存的,数据读取速度极快,适合处理高并发的场景。 2. 数据结构丰富:Redis提供了字符串、哈希、列表、集合、有序集合等多种数据结构,适合构建复杂的应用场景。 3. ...

    数字信号处理课程设计大量原代码-mian2.m

    数字信号处理课程设计大量原代码-mian2.m 本帖最后由 zyzhang 于 2012-4-24 18:47 编辑 模拟采样定理的实现模拟滤波器的设计切比雪夫I型低通滤波器设计凯塞窗设计数字高通滤波器数字FIR滤波器的设计方法线性...

    mian_2_3.m

    mian_2_3.m

    mian.html

    mian.html

    iapp源码大全:mian.iapp

    iapp源码大全:mian.iapp

    mian-2.0.3

    在实际开发中,使用"Mian-2.0.3"这个版本的Apache MINA,你可以构建高效、可靠的网络服务,如服务器端应用、客户端应用、分布式系统中的通信模块等。结合其提供的文档和社区支持,开发者可以更专注于业务逻辑,而非...

    cxf webservice 实例(包括服务端及客户端代码),可用

    cxf webservice 实例(包括服务端及客户端代码),亲测可用,项目采用spring与cxf结合的,附件解压后看到两个项目,分部是服务端项目和客户端项目,启动tomcat服务器部署后,通过客户端右键运行java 的 mian方法代码...

    数字信号处理课程设计大量原代码-mian3.m

    mian2.m menu.m juan.m jiemian1.m gaotong.m daizu.m daitong.m ...

    数字信号处理课程设计大量原代码-mian5.m

    mian2.m menu.m juan.m jiemian1.m gaotong.m daizu.m daitong.m ...

    spring-boot——web笔记

    Spring Boot 是一个基于 Java 的框架,它简化了创建和配置基于 Spring 的应用程序。在这个主题下,我们将探讨 Spring Boot 如何处理静态资源、Thymeleaf 模板引擎的使用,以及如何自定义视图解析器。 1. **处理静态...

    乒乓mian.c

    乒乓mian.c

    springWebSocket 一对一在线聊天

    1.文件用maven的方式导入到MyEcplise 直接运行Application里面的mian函数 2.然后用cmd的命令ipconfig 查看本地id 3.localhost://8080/index2.html/UID=3(localhost 换成本地ip,UID 用来模拟当前用户的id) 4.多台...

    CARS-mian.m

    CARS-mian.m

    mian.__i

    mian.__i

    tj_mian.c

    tj_mian.c

    GUI_mian.m

    GUI_mian.m

    DE_mian.m

    DE_mian.m

    kdc.rar_crank rocker mian

    在标题“kdc.rar_crank rocker mian”中,“kdc.rar”可能是文件的压缩包名,而“crank rocker mian”则提示了内容与曲柄摇杆机构有关。描述中的“Crank Rocker Animation”明确指出这是一个关于曲柄摇杆机构的动态...

    Pages-SUB-Convert-mian.zip

    《Pages-SUB-Convert-mian.zip》文件是一个与苹果公司的Pages软件相关的压缩包,它可能包含了一系列关于Pages文档转换和子文件处理的资料。Pages是一款强大的文字处理和页面排版应用,广泛应用于Mac和iOS设备上。这...

    keepalived-mian.zip

    1. **下载与解压**:首先,从提供的源获取"keepalived-mian.zip"压缩包,然后将其解压到适当的目录,例如 `/usr/local`。 2. **配置Keepalived**:在解压后的目录中,你会找到`keepalived.conf`配置文件。根据你的...

Global site tag (gtag.js) - Google Analytics