2016-04-05 20:46:53.0|分类: netty|浏览量: 3711
即时通讯服务端系统架构: 1、平台最上层支持android、ios、pc端,按照相应的协议进行数据通信,客户端和服务器能建立连接并且传输信息。 2、通信核心层采用了开源网络通信框架netty,负责底层的网络通信。Netty是一个java开源框架。Netty提供异步的、事件驱动的网络应用程序框架和工具,用以快速开发高性能、高可靠性的网络服务器和客户端程序。 平台的通信采用netty框架并且使用TCP/IP协议进行数据传输,并没有基于JDK的NIO类构建自己的通信框架。开发高质量的NIO程序挑战性很大,除去NIO类库常见的Bug和代码复杂性,作为NIO服务端,需要能够处理网络的不稳定性、网络的无响应、安全认证、客户端心跳重连机制和消息的编解码等。如果没有足够的NIO编程经验积累,自己开发网络通信稳定性难以满足需求。 3、客户端和服务器建立长连接,服务器端会保存着这个长连接,然后对长连接进行轮询看看是否有新的消息。当客户端socket在非正常情况家掉线:断网,断电等特殊问题的时候,服务器端没有收到连接关闭命令,连接对象不会自动关闭,继续保持着链接活跃。 连接池保持海量的终端链接,而且通常使用长连接,服务器维持大量长连接,资源消耗都非常大;为了减轻服务器端资源消耗和失效的长连接,连接池设置活跃时间,如果长时间没有收到消息和发送消息,则把长连接关闭,释放掉资源。 4、业务逻辑:主要有用户登录、聊天、监控功能 5、数据存储层:用户基本信息存储在mysql关系型数据库中,聊天信息存储在文件数据库mongodb中,发送的图片直接存储到本地文件 客户端和服务器通信流程:有客户端向服务器发送会话请求,服务器收到申请后会检查该客户端是否为本服务器域内的,如果是则开始会话,否则返回错误信息。
服务器端公共模块: 会话模块:负责客户端与服务器之间连接的会话管理模块,主要功能是:建立连接,断开连接,接收字节流,发送字节流等 解析封装模块:负责字节流的解析和封装的字节流模块,主要功能是:将字节流流解析成java对象,将java对象封装成字节流 路由器模块:负责信息读取和转发的路由模块,主要功能是:从对应的端口截取数据,并根据其命名空间的不同进行转发 |