Mina通信

u010512172 2013-05-20 04:34:44
客户端代码:

package com.autosoftchina.obs.service;

import org.apache.mina.core.service.IoHandlerAdapter;
import org.apache.mina.core.session.IoSession;

public class SimpleMinaClientHandler extends IoHandlerAdapter{

/*
* 当客户端接收消息时
*/

public void messageReceived(IoSession session,Object message)throws Exception{

Integer num=Integer.valueOf((String)message);

if(num==null||num>10){

session.close(true);
return;
}

System.out.println("receice server num: [ " +num + " ] ");

Thread.sleep(1000);

session.write("client received num is "+ num +",request next num ");
}

/*
* 当一个客户端被关闭时
*/

public void sessionClosed(IoSession session)throws Exception{

System.out.println("client disconnection");

}

/*
* 当一个客户端连接进入时
*/

public void sessionOpened(IoSession session)throws Exception{

System.out.println("create connection to server: "+session.getRemoteAddress());

session.write("client started");

}


}




package com.autosoftchina.obs.service;

import java.net.InetSocketAddress;

import org.apache.mina.core.filterchain.DefaultIoFilterChainBuilder;
import org.apache.mina.core.future.ConnectFuture;
import org.apache.mina.filter.codec.ProtocolCodecFilter;
import org.apache.mina.filter.codec.textline.TextLineCodecFactory;
import org.apache.mina.transport.socket.nio.NioSocketConnector;

public class MainClient {

//服务器ip
public static final String SERVER_IP="127.0.0.1";

//服务器端口
public static final int SERVER_PORT=8899;

public static void main(String[] args) {

NioSocketConnector connector = new NioSocketConnector();

DefaultIoFilterChainBuilder chain = connector.getFilterChain();

chain.addLast("myChain", new ProtocolCodecFilter(new TextLineCodecFactory()));

connector.setHandler(new SimpleMinaClientHandler());

connector.setConnectTimeoutMillis(30 * 1000);

ConnectFuture cf = connector.connect(new InetSocketAddress(SERVER_IP, SERVER_PORT));

cf.awaitUninterruptibly();

cf.getSession().getCloseFuture().awaitUninterruptibly();

connector.dispose();

}

}

服务器端代码:

@Component
@Transactional(readOnly = true)
public class MessageService {

private static final int SERVER_PORT = 8899;

@PostConstruct
public void socketServer() {
SocketAcceptor acceptor = new NioSocketAcceptor();
SocketSessionConfig sessionConfig = acceptor.getSessionConfig();
sessionConfig.setReadBufferSize(2048);
DefaultIoFilterChainBuilder chain = acceptor.getFilterChain();
chain.addLast("myChain", new ProtocolCodecFilter(
new TextLineCodecFactory()));
acceptor.setHandler(new SimpleMinaServerHandler());
try {
acceptor.bind(new InetSocketAddress(SERVER_PORT));
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("Mina server is listing port: " + SERVER_PORT);
}

现在要推送信息到客户端,求教大神指点

@RequestMapping(value = "push/windows/{id}")
public String pushWindows(@PathVariable("id") Long id,Model model) {

Message message = messageService.getMessage(id);

try {




} catch (Exception e) {
model.addAttribute("msg", "推送失败:" + e.getMessage());
return "admin/message/push";
}
model.addAttribute("msg", "推送成功");
return "admin/message/push/windows";
}
...全文
379 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
gu390154333 2013-06-08
  • 打赏
  • 举报
回复
public class ServerDemo {
	private static Logger logger = Logger.getLogger("op");
	private static int PORT = 3721;

	public static void main(String[] args) {
		IoAcceptor acceptor = null;
		try {
			// 创建一个非阻塞的server端的Socket
			acceptor = new NioSocketAcceptor();
			// 设置过滤器(使用Mina提供的文本换行符编解码器)
			acceptor.getFilterChain().addLast(
					"codec",
					new ProtocolCodecFilter(new TextLineCodecFactory(Charset
							.forName("UTF-8"),
							LineDelimiter.WINDOWS.getValue(),
							LineDelimiter.WINDOWS.getValue())));
			// 设置读取数据的缓冲区大小
			acceptor.getSessionConfig().setReadBufferSize(2048);
			// 读写通道10秒内无操作进入空闲状态
			acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, 3);
			// 绑定逻辑处理器
			acceptor.setHandler(new ServerHandlerDemo());
			// 绑定端口
			acceptor.bind(new InetSocketAddress(PORT));
		} catch (Exception e) {
			logger.error("服务端启动异常....", e);
			e.printStackTrace();
		}
	}
}
public class ServerHandlerDemo extends IoHandlerAdapter{
	private static Logger logger = Logger.getLogger("op");
	
	@Override
	public void sessionCreated(IoSession session) throws Exception {
		logger.info("服务端与客户端创建连接...");
	}

	@Override
	public void sessionOpened(IoSession session) throws Exception {
		logger.info("服务端与客户端连接打开...");
	}

	@Override
	public void messageReceived(IoSession session, Object message)
			throws Exception {
		String msg = message.toString();
		logger.info("接收信息:"+msg);
		try {
			session.write("返回信息: XXX");
			
		} catch (Exception e) {
			logger.error(e.getMessage());
			session.write(e.getMessage());
		}
		
	}

	@Override
	public void messageSent(IoSession session, Object message) throws Exception {
		//短连接
		session.close(true);
	}

	@Override
	public void sessionClosed(IoSession session) throws Exception {

	}

	@Override
	public void sessionIdle(IoSession session, IdleStatus status)
			throws Exception {
		logger.info("服务端进入空闲状态...");
	}

	@Override
	public void exceptionCaught(IoSession session, Throwable cause)
			throws Exception {
		
		logger.error("服务端发送异常...", cause);
	}
public class ClientDemo {
	private static Logger logger = Logger.getLogger("op");

	private static String HOST = "127.0.0.1";

	private static int PORT = 3721;

	public static void main(String[] args) {
		// 创建一个非阻塞的客户端程序
				final IoConnector connector = new NioSocketConnector();
				// 设置链接超时时间
				connector.setConnectTimeoutMillis(3000);
				// 添加过滤器
				connector.getFilterChain().addLast(
						"codec",
						new ProtocolCodecFilter(new TextLineCodecFactory(Charset
								.forName("UTF-8"), LineDelimiter.WINDOWS.getValue(),
								LineDelimiter.WINDOWS.getValue())));
		for (int i = 0; i < 10; i++) {
			new Thread(new Runnable() {

				@Override
				public void run() {
					new ClientDemo().visitServer(connector);

				}
			}).start();
		}

	}

	public void visitServer(IoConnector connector) {
		
		// 添加业务逻辑处理器类
		connector.setHandler(new ClientHandlerDemo());
		IoSession session = null;
		try {
			
			ConnectFuture future = connector.connect(new InetSocketAddress(
					HOST, PORT));// 创建连接
			future.awaitUninterruptibly();// 等待连接创建完成
			session = future.getSession();// 获得session
			
			session.write("mina" + Thread.currentThread().getId());// 发送消息
			
		} catch (Exception e) {
			logger.error("客户端链接异常...", e);
		}

		if (session != null) {
			session.getCloseFuture().awaitUninterruptibly();// 等待连接断开
			connector.dispose();
		} else {
			connector.dispose();
		}
	}
}
public class ClientHandlerDemo extends IoHandlerAdapter{
	
	private static Logger logger = Logger.getLogger("op");
	
	@Override
	/**
	 * 客户端从服务端接受到的信息
	 */
	public void messageReceived(IoSession session, Object message)
			throws Exception {
		String msg = message.toString();
		logger.info(msg);
	}

	@Override
	public void exceptionCaught(IoSession session, Throwable cause)
			throws Exception {
		logger.error("客户端发生异常...", cause);
	}
}
hatom 2013-06-05
  • 打赏
  • 举报
回复
把你需要的数据封装好。直接写到IoSession里面就行了。我上传的资源里面,有相关MINA的资料。

25,980

社区成员

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

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