解密陌生人(3)服务器整体架构简要

提示: 因为工程稍微有点大对我个人来说,所以可能在某些方面讲的不清楚或逻辑性不够强,如果有问题请及时@我。 之前把概要设计说了一下。现在就进入详细设计与实现了。这篇先说服务器的。服务器就是处理客户端发来的各种请求的,比如注册、找回密码、添加好友等等。当然这些请求都是自己按实际需要认为设计的。 先将服务器的整体构架,,由于用的是集成好的框架mina,所以不需要自己去考虑太多具体细节,如异步处理,如何实现高并发。如果用传统的socket当然也可以实现,但是高并发的要求很难达到。之前已经发了一篇关于mina的,就是这个服务器的雏形。使用mina ,如果只是简单的发送字符串消息,就不用自己重写编码解码器,它本身有一个TextLineCodeFactory。 这里要实现发送多媒体消息,还要加密会话,所以必须要自己编写编解码器。

其中最主要的便是com.imomo_server 。这里面负责的便是所有与客户端的交互(包括各种业务逻辑)。 public class iMomoServer { public static void main(String[] args) { NioSocketAcceptor acceptor = new NioSocketAcceptor(); acceptor.getFilterChain().addLast(“codec”, new ProtocolCodecFilter(new iMoMoCodecFactory())); acceptor.setHandler(new iMomoServerHandler()); acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, 60);//一分钟为通话,进入空闲状态 try { acceptor.bind(new InetSocketAddress(StaticValues.SERVER_PORT)); } catch (IOException e) { e.printStackTrace(); } } } 这个就是开启端口监听服务的类,就这么多(再一次体现了mina的强大)。然后在一个就是处理业务逻辑的类。 public class MinaServerHandler extends IoHandlerAdapter{

@Overridepublic void exceptionCaught(IoSession session, Throwable cause)throws Exception {super.exceptionCaught(session, cause);cause.printStackTrace();}@Overridepublic void inputClosed(IoSession session) throws Exception {super.inputClosed(session);System.out.println(“inputClosed”);}@Overridepublic void messageReceived(IoSession session, Object message)throws Exception {SmsObject sms = (SmsObject) message;System.out.println(sms.toString());}@Overridepublic void messageSent(IoSession session, Object message) throws Exception {System.out.println(“messageSent”);}@Overridepublic void sessionClosed(IoSession session) throws Exception {System.out.println(“sessionClosed”+session.getRemoteAddress()+”:is Closed”);}@Overridepublic void sessionCreated(IoSession session) throws Exception {System.out.println(“sessionCreated”);}@Overridepublic void sessionIdle(IoSession session, IdleStatus status)throws Exception {System.out.println(“sessionIdle”);}@Overridepublic void sessionOpened(IoSession session) throws Exception {System.out.println(“open:::”+session.getAttribute(session.getId()));;}

}

在messageReceived方法中接收客户端发送的消息,然后进行相应的处理即可。

com.database 和数据库操作相关的包,在用户注册、修改个人信息、获得好友列表、发送离线消息时会用到。 com.imomo_codecfactory 就是上面一提到的编解码器包 com.imomo_msg 这个包包含服务器和客户端传递的消息类,和一些Java bean。 com.managers 会话管理, 包括用户长连接的会话session、用户位置记录、群组记录 com.security 安全处理 PBE对称加密 com.server_utils 一些工具类 包括两个用户的距离计算、和文件相关的处理、发送邮件、静态变量

生活会变成什么样子?正因为时光流逝一去不复返,

解密陌生人(3)服务器整体架构简要

相关文章:

你感兴趣的文章:

标签云: