全部博文(626)
分类: 网络与安全
2014-09-27 21:29:08
Apache Mina开发手册之三
2、Mina服务器的架构
Mina服务器的架构图如下所示:
1)IOAcceptor即I/O接收器,负责监听网络连接和发过来的数据包。
2)对于任一新连接,会创建一个新会话,随后所有从该IP地址:端口发送过来的请求都会由该会话进行处理。
3)会话接收到的所有包,都会通过整个过滤器链的处理。过滤器可用于修改包的内容(比如转换对象,添加/删除信息等),把原始的字节转换成高级对象,反之亦然,以及包编解码器PacketEncoder和PacketDecoder等都是相当有用的。
4)最后包通过IOHandler句柄处理或转换,以满足业务的需求。
3、基于Mina的客户端架构
Mina客户端需要连接到服务器,发送消息并处理响应,它的架构图如下所示:
1)客户端首先创建IOConnector连接器(Mina为Socket连接构建的),启动时与服务器绑定。
2)一旦连接建立,会创建会话,并与连接相关联。
3)应用程序或客户端向会话写入数据,使得数据被发送到服务器,而后通过过滤器链。
4)从服务器收到的响应或消息也会遍历整个过滤器链,到达IOHandler句柄,进行处理。
六、创建Mina客户端
下面我们编写一个求和运算的客户端为例。
可见,要构建Mina客户端,我们需要完成以下步骤:
1)创建连接器
2)创建过滤器链
3)创建IOHandler句柄,并添加到连接器
4)绑定到服务器
下面详细说明。
1、创建连接器
NioSocketConnector connector = new NioSocketConnector();
if(USE_CUSTOM_CODEC){ connector.getFilterChain().addLast("codec", new ProtocolCodecFilter(new SumUpProtocolCodecFactory(false))); } else{ connector.getFilterChain().addLast("codec", new ProtocolCodecFilter(new ObjectSerializationCodecFactory())); }
connector.setHandler(new ClientSessionHandler(values));
IoSession session; for (;;) { try { ConnectFuture future = connector.connect(new InetSocketAddress(HOSTNAME, PORT)); future.awaitUninterruptibly(); session = future.getSession(); break; } catch (RuntimeIoException e) { System.err.println("Failed to connect."); e.printStackTrace(); Thread.sleep(5000); } }