请高手指教,看我用mina写的一个消息发送类能满足要求不,谢谢!!!

自由的程序员 2012-10-26 09:12:23
我的需求是:用mina开了一个服务器监听,现在要向服务器发送消息,假设网络不太稳定,发出的每一条消息都需要确定服务器是否收到,注意哈,只需要明确的知道发出的消息服务器收到没有,各位看看下面的方法能满足要求吗?如果不行,是不是一定要以是否收到服务器的确认来判断,欢迎大家给出宝贵的意见

package org.learnworld.mina;

import java.io.Serializable;
import java.net.InetSocketAddress;

import org.apache.mina.core.future.ConnectFuture;
import org.apache.mina.core.future.WriteFuture;
import org.apache.mina.core.service.IoConnector;
import org.apache.mina.core.service.IoHandlerAdapter;
import org.apache.mina.core.session.IoSession;
import org.apache.mina.filter.codec.ProtocolCodecFilter;
import org.apache.mina.filter.codec.serialization.ObjectSerializationCodecFactory;
import org.apache.mina.filter.executor.ExecutorFilter;
import org.apache.mina.transport.socket.nio.NioSocketConnector;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class SendMessageUtil {
private static final Logger logger = LoggerFactory.getLogger(SendMessageUtil.class);

private static IoConnector connector;

static {
IoConnector connector = new NioSocketConnector();
connector.getFilterChain().addLast("codec", new ProtocolCodecFilter(new ObjectSerializationCodecFactory()));
connector.getFilterChain().addLast("exceutor", new ExecutorFilter());
connector.setHandler(new IoHandlerAdapter());
}


/**
* 本方法用于向指定的服务器发送指定的消息,并指定尝试发送次数和每次发送之间的时间间隔
* @param message 待发送的信息
* @param ip 服务器地址
* @param port 服务器端口
* @param times 发送消息尝试次数
* @param interval 发送间隔时长
* @return 如果服务器收到消息返回true,否则返回false
*/
public static boolean sendMessage(Serializable message, String ip, int port, int times, long interval) {
for (int i = 0; i < times; i++) {
IoSession session = null;
try {
ConnectFuture connectFuture = connector.connect(new InetSocketAddress(ip, port));
connectFuture.awaitUninterruptibly();
Throwable throwable = connectFuture.getException();
if (throwable != null) {
logger.info("连接到" + ip + ":" + port + "失败" + "-->" + throwable.getMessage());
continue;
}
if (connectFuture.isConnected()) {
session = connectFuture.getSession();
WriteFuture writeFuture = session.write(message);
writeFuture.awaitUninterruptibly();
throwable = writeFuture.getException();
if (throwable != null || !writeFuture.isWritten()) {
logger.info("写出" + message + "错误", throwable);
continue;
}
logger.debug("向" + ip + ":" + "port" + "发送" + message + "成功");
return true;
}
Thread.sleep(interval);
} catch (RuntimeException e) {
logger.debug("", e);
} catch (InterruptedException e) {
System.out.println(e.getMessage());
} finally {
if (session != null) {
session.close(false);
}
}
}
return false;
}
}
...全文
105 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

25,980

社区成员

发帖
与我相关
我的任务
社区描述
高性能WEB开发
社区管理员
  • 高性能WEB开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧