package com.pateo.navi.server;
import java.net.InetSocketAddress;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.mina.core.filterchain.IoFilterAdapter;
import org.apache.mina.core.future.ConnectFuture;
import org.apache.mina.core.session.IoSession;
import org.apache.mina.filter.codec.ProtocolCodecFilter;
import org.apache.mina.filter.logging.LoggingFilter;
import org.apache.mina.transport.socket.nio.NioSocketConnector;
/**
* @Description: mina客户端,包含断线重连机制,空闲重连机制
* @author whl
* @date 2014-11-2
*/
public class ClentMain extends Thread{
private final static Log log = LogFactory.getLog(ClentMain.class);
@Override
public void run() {
//ip
String host = "127.0.0.1";
//端口
int port = 8888;
//停车场id
final String carPark_id = "1";
// 创建客户端连接器.
final NioSocketConnector connector = new NioSocketConnector();
//设置连接超时
connector.setConnectTimeoutMillis(30000);
// 设置默认访问地址
connector.setDefaultRemoteAddress(new InetSocketAddress(host, port));
//将IoSession的主键属性注入线程映射表MDC中
//connector.getFilterChain().addLast("mdc", new MdcInjectionFilter());
//日志过滤器
connector.getFilterChain().addLast("logger", new LoggingFilter());
// 设置编码过滤器
connector.getFilterChain().addLast("codec",new ProtocolCodecFilter(new HCoderFactory()));
//添加处理器
connector.setHandler(new ClintHandler());
// 设置接收缓冲区的大小
connector.getSessionConfig().setReceiveBufferSize(10240);
// 设置输出缓冲区的大小
connector.getSessionConfig().setSendBufferSize(10240);
/**
* 空闲重连的机制,根据需要选择相应的配置
*/
// 读写都空闲时间:30秒
//connector.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, 30);
// 读(接收通道)空闲时间:40秒
//connector.getSessionConfig().setIdleTime(IdleStatus.READER_IDLE, 40);
// 写(发送通道)空闲时间:50秒
//connector.getSessionConfig().setIdleTime(IdleStatus.WRITER_IDLE, 50);
//断线重连回调拦截器
connector.getFilterChain().addFirst("reconnection", new IoFilterAdapter() {
@Override
public void sessionClosed(NextFilter nextFilter, IoSession ioSession) throws Exception {
for(;;){
try{
Thread.sleep(3000);
ConnectFuture future = connector.connect();
future.awaitUninterruptibly();// 等待连接创建成功
IoSession session = future.getSession();// 获取会话
session.write("key="+carPark_id);
if(session.isConnected()){
log.info("断线重连["+ connector.getDefaultRemoteAddress().getHostName() +":"+ connector.getDefaultRemoteAddress().getPort()+"]成功");
//System.out.println("断线重连["+ connector.getDefaultRemoteAddress().getHostName() +":"+ connector.getDefaultRemoteAddress().getPort()+"]成功");
break;
}
}catch(Exception ex){
log.info("重连服务器登录失败,3秒再连接一次:" + ex.getMessage());
//System.out.println("重连服务器登录失败,3秒再连接一次:" + ex.getMessage());
}
}
}
});
//开始连接
for (;;) {
try {
ConnectFuture future = connector.connect();
// 等待连接创建成功
future.awaitUninterruptibly();
// 获取会话
IoSession session = future.getSession();
//发送消息
session.write("key=" + carPark_id);
log.error("连接服务端" + host + ":" + port + "[成功]" + ",,时间:" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
break;
} catch (Exception e) {
//System.out.println("连接服务端" + host + ":" + port + "失败" + ",,时间:" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()) + ", 连接MSG异常,请检查MSG端口、IP是否正确,MSG服务是否启动,异常内容:" + e.getMessage());
log.error("连接服务端" + host + ":" + port + "失败" + ",,时间:" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()) + ", 连接MSG异常,请检查MSG端口、IP是否正确,MSG服务是否启动,异常内容:" + e.getMessage(), e);
// 连接失败后,重连10次,间隔30s
try {
Thread.sleep(5000);
} catch (InterruptedException e1) {
e1.printStackTrace();
log.error("连接服务端失败后,睡眠5秒发生异常!");
}
}
}
// cf.getSession().write("quit");//发送消息
//cf.getSession().close();
//cf.getSession().getCloseFuture().awaitUninterruptibly();// 等待连接断开
//connector.dispose();
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
spring+mina实现http接口服务端通信客户端
共41个文件
class:10个
java:9个
xml:8个
5星 · 超过95%的资源 需积分: 49 32 下载量 16 浏览量
2018-06-25
14:37:04
上传
评论 2
收藏 34KB RAR 举报
温馨提示
此demo利用springmvc整合mina,实现客户端主动发送消息到服务端,并且以http接口的方式实现,亲测可用。
资源推荐
资源详情
资源评论
收起资源包目录
mina-server.rar (41个子文件)
mina-server
pom.xml 3KB
target
test-classes
m2e-wtp
web-resources
META-INF
maven
mina-server
mina-server
pom.xml 3KB
pom.properties 229B
MANIFEST.MF 108B
classes
spring-mvc.xml 3KB
log4j.properties 1KB
com
pateo
navi
server
ClentMain.class 4KB
SessionMap.class 2KB
ClintTest1.class 598B
HEncoder.class 2KB
ClentMain$1.class 3KB
HCoderFactory.class 1KB
ClintHandler.class 2KB
ServerHandler.class 3KB
controller
serverMina.class 2KB
HDecoder.class 1KB
applicationContext.xml 3KB
.settings
org.eclipse.m2e.core.prefs 90B
org.eclipse.wst.jsdt.ui.superType.name 6B
org.eclipse.wst.common.project.facet.core.xml 252B
org.eclipse.wst.common.component 758B
org.eclipse.wst.jsdt.ui.superType.container 49B
org.eclipse.wst.validation.prefs 50B
.jsdtscope 639B
org.eclipse.jdt.core.prefs 430B
src
test
java
main
webapp
WEB-INF
web.xml 3KB
index.jsp 57B
resources
spring-mvc.xml 3KB
log4j.properties 1KB
applicationContext.xml 3KB
java
com
pateo
navi
server
SessionMap.java 2KB
HDecoder.java 2KB
ClintHandler.java 1KB
HCoderFactory.java 1KB
ClintTest1.java 219B
HEncoder.java 2KB
ServerHandler.java 2KB
controller
serverMina.java 1KB
ClentMain.java 6KB
.project 1KB
.classpath 1KB
共 41 条
- 1
资源评论
- yiyangduncuo2019-08-02亲测可以使用
- 谢顶少年2018-08-11大佬,请问使用什么格式去请求后台呢?传输的数据格式是啥呢??
blackcoffee_code
- 粉丝: 4
- 资源: 4
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功