下午那篇博客我们讲到了Mina的客户端的开发,如果还有没看过的同学可以看一下,我是传送门。现在,我们来学习一下,Mina的服务器的开发。
一、首先看一下,我的服务器的代码图片:
服务器代码我是在MyEclipse下写的。
二、服务器的整体思路:(同客户端差不多)
-
-
- 首先,产生一个socket接收对象(SocketAcceptor),用于接收客户端的连接请求;
- 然后,对这个接收器添加我们的I/O过滤器(SSL加密、日志过滤器、编码过滤器等,这里注意,如果添加SSL过滤器,那么一定要第一个添加,否则无法对数据加密);
- 接下来,为连接设置I/O处理器,顾名思义就是处理接收到的消息(这里我们只能设置一个处理器,如果有设置多个,那么默认进入到最后一个I/O处理器中进行处理);
- 最后,将服务器绑定到某端口(如:3456,最好是1024以上,因为1024以下的端口系统占用)。
-
三、正式编码
这里我同样展示几个比较重要的类来详细说明一下:
-
-
- MinaServer.Java
View Code
1 package com.mina.example; 2 3 import java.io.IOException; 4 import java.net.InetSocketAddress; 5 6 import org.apache.mina.core.filterchain.DefaultIoFilterChainBuilder; 7 import org.apache.mina.core.session.IdleStatus; 8 import org.apache.mina.filter.codec.ProtocolCodecFilter; 9 import org.apache.mina.filter.logging.LoggingFilter; 10 import org.apache.mina.filter.ssl.SslFilter; 11 import org.apache.mina.transport.socket.SocketAcceptor; 12 import org.apache.mina.transport.socket.nio.NioSocketAcceptor; 13 14 import com.mina.charset.CharsetFactory; 15 import com.mina.hanlder.MsgHanler; 16 import com.mina.ssl.SSLContextGenerator; 17 18 /** 19 * <pre> 20 * Project Name:MinaServer 21 * Package:com.mina.example 22 * FileName:MinaServer.java 23 * Purpose:服务器 24 * Create Time: 2014-8-19 下午4:59:55 25 * Create Specification: 26 * Modified Time: 27 * Modified by: 28 * Modified Specification: 29 * Version: 1.0 30 * </pre> 31 * 32 * @author myp 33 */ 34 public class MinaServer { 35 36 private SocketAcceptor acceptor; 37 38 public MinaServer() { 39 /* 40 * 1.创建一个socket连接,连接到服务器 41 */ 42 acceptor = new NioSocketAcceptor(); 43 } 44 45 public boolean start() { 46 /* 47 * 获取过滤器链,用于添加过滤器 48 */ 49 DefaultIoFilterChainBuilder filterChain = acceptor.getFilterChain(); 50 51 /* 52 * 2.为连接添加过滤器,SSL、日志、编码过滤器 53 */ 54 // SSLContextGenerator是我们自己写的一个SSL上下文产生器,稍后会讲到 55 SslFilter sslFilter = new SslFilter( 56 new SSLContextGenerator().getSslContext()); 57 // a.ssl过滤器,这个一定要第一个添加,否则数据不会进行加密 58 filterChain.addLast("sslFilter", sslFilter); 59 System.out.println("SSL support is added.."); 60 // b.添加日志过滤器 61 filterChain.addLast("loger", new LoggingFilter()); 62 // c.添加字符的编码过滤器 63 filterChain.addLast("codec", new ProtocolCodecFilter( 64 new CharsetFactory())); 65 66 /* 67 * 3.设置消息处理器,用于处理接收到的消息 68 */ 69 acceptor.setHandler(new MsgHanler()); 70 // 设置空闲的时间是30s 71 acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, 30); 72 try { 73 /* 74 * 4.将服务器绑定到3456端口 75 */ 76 acceptor.bind(new InetSocketAddress(3456)); 77 } catch (IOException e) { 78 e.printStackTrace(); 79 return false; 80 } 81 return true; 82 } 83 84 public static void main(String[] args) { 85 MinaServer server = new MinaServer(); 86 server.start(); 87 } 88 }
- MinaServer.Java
-