Apace Mina Hello world



public class TotalCallable implements Callable<Integer> {

private NioSocketConnector connector;
private ConnectFuture cf;

public TotalCallable(String ip, int port, Parameter parameter) {

connector = new NioSocketConnector();
// 超时设置
int connectTimeout = p.getConnectTimeout();
if (connectTimeout == 0) {
connectTimeout = Parameter.TIMEOUT_CONNECT;
}
connector.setConnectTimeoutMillis(connectTimeout * 1000L);
DefaultIoFilterChainBuilder chain = connector.getFilterChain();
chain.addLast("codec", new ProtocolCodecFilter(new ObjectSerializationCodecFactory()));
SocketSessionConfig cfg = connector.getSessionConfig();
cfg.setUseReadOperation(true);
// 建立连接
cf = connector.connect(new InetSocketAddress(ip, port));
// 等待连接创建完成
cf.awaitUninterruptibly();

public Integer call() {
IoSession session = cf.getSession();
try {
long s = System.currentTimeMillis();

int readTimeout = p.getSearchTimeout();
if (readTimeout == 0) {
readTimeout = Parameter.TIMEOUT_SEARCH;
}
// 发送
session.write(p).awaitUninterruptibly();
// 接收
ReadFuture readFuture = session.read();
if (readFuture.awaitUninterruptibly(readTimeout, TimeUnit.SECONDS)) {
Object msg = readFuture.getMessage();
if (msg instanceof Object[]) {
Object[] rt = (Object[]) msg;
if (rt.length > 1 && rt[0] instanceof Integer) {
Integer total = (Integer) rt[0];
return total;
}
}
} else {
// 读超时
}
long e = System.currentTimeMillis();
e = System.currentTimeMillis();
log.info("完成数据接收:" + (e - s));
} catch (Exception e) {
log.error("ip " + ip + " port : " + port);
log.error(e.getMessage(), e);
// 重新建立连接
cf = null;
} finally {
// 断开
session.close(true);
session.getService().dispose();
connector.dispose();
}
return 0;
}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值