项目中遇到要在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发送数据。
分享到:
相关推荐
一、Redis的特性与功能 1. 高性能:Redis是基于内存的,数据读取速度极快,适合处理高并发的场景。 2. 数据结构丰富:Redis提供了字符串、哈希、列表、集合、有序集合等多种数据结构,适合构建复杂的应用场景。 3. ...
数字信号处理课程设计大量原代码-mian2.m 本帖最后由 zyzhang 于 2012-4-24 18:47 编辑 模拟采样定理的实现模拟滤波器的设计切比雪夫I型低通滤波器设计凯塞窗设计数字高通滤波器数字FIR滤波器的设计方法线性...
mian_2_3.m
mian.html
iapp源码大全:mian.iapp
在实际开发中,使用"Mian-2.0.3"这个版本的Apache MINA,你可以构建高效、可靠的网络服务,如服务器端应用、客户端应用、分布式系统中的通信模块等。结合其提供的文档和社区支持,开发者可以更专注于业务逻辑,而非...
cxf webservice 实例(包括服务端及客户端代码),亲测可用,项目采用spring与cxf结合的,附件解压后看到两个项目,分部是服务端项目和客户端项目,启动tomcat服务器部署后,通过客户端右键运行java 的 mian方法代码...
mian2.m menu.m juan.m jiemian1.m gaotong.m daizu.m daitong.m ...
mian2.m menu.m juan.m jiemian1.m gaotong.m daizu.m daitong.m ...
Spring Boot 是一个基于 Java 的框架,它简化了创建和配置基于 Spring 的应用程序。在这个主题下,我们将探讨 Spring Boot 如何处理静态资源、Thymeleaf 模板引擎的使用,以及如何自定义视图解析器。 1. **处理静态...
乒乓mian.c
1.文件用maven的方式导入到MyEcplise 直接运行Application里面的mian函数 2.然后用cmd的命令ipconfig 查看本地id 3.localhost://8080/index2.html/UID=3(localhost 换成本地ip,UID 用来模拟当前用户的id) 4.多台...
CARS-mian.m
mian.__i
tj_mian.c
GUI_mian.m
DE_mian.m
在标题“kdc.rar_crank rocker mian”中,“kdc.rar”可能是文件的压缩包名,而“crank rocker mian”则提示了内容与曲柄摇杆机构有关。描述中的“Crank Rocker Animation”明确指出这是一个关于曲柄摇杆机构的动态...
《Pages-SUB-Convert-mian.zip》文件是一个与苹果公司的Pages软件相关的压缩包,它可能包含了一系列关于Pages文档转换和子文件处理的资料。Pages是一款强大的文字处理和页面排版应用,广泛应用于Mac和iOS设备上。这...
1. **下载与解压**:首先,从提供的源获取"keepalived-mian.zip"压缩包,然后将其解压到适当的目录,例如 `/usr/local`。 2. **配置Keepalived**:在解压后的目录中,你会找到`keepalived.conf`配置文件。根据你的...