1、前言
之前的一篇文章介绍基于基于Mina实现的一个简单数据采集中间件的具体实现,该数据据采集中间件需要实现与多个终端的长连接,并定时给所有终端发送指令,终端在接收到相关指令后,返回相关信息给中间件。中间件需要一直监测所有终端的在线状态,并一直监听、接收所有终端的消息,并启动多个定时任务给在线终端发送相关指令。那么怎样测试开启多个终端,并连接采集服务器,在长连接的基础上持续、稳定的进行数据采集呢。以下就是基于测试的目地实现一个可以开启多个终端的客户端测试程序
2、具体代码如下:
主程序入口MinaClient.java:
public class MinaClient {
public static void main(String []args)throws Exception{
NioSocketConnector connector = new NioSocketConnector();
connector.getFilterChain().addFirst("codec",new StreamWriteFilter());
connector.setHandler(new MinaClientHandler());
connector.setConnectTimeout(3000);
//设置缓存大小
connector.getSessionConfig().setReadBufferSize(101024);
//读(接收通道)空闲时间:10秒
connector.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, 10);
//IoSession session = null;
try {
//循环遍历创建多个客户端连接
for (int i = 0; i < 100; i++) {
//创建一个客户端连接
ConnectFuture future = connector.connect(new InetSocketAddress("127.0.0.1",8001));
//等待连接创建完成
future.awaitUninterruptibly();
}
} catch (Exception e) {
e.printStackTrace();
} /*finally {
if(session!=null){
//等待本次连接通话结束,不可中断式的阻塞等待
session.getCloseFuture().awaitUninterruptibly();
}
}*/
Thread.sleep(1000 * 20);
//开始执行定时任务
TaskUtils.startTask();
System.out.println("bbbbbbbbbbbbbbb");
}
}
客户端的handler处理类MinaClientHandler:
public class MinaClientHandler extends IoHandlerAdapter {
@Override
public void sessionOpened(IoSession session) throws Excep