# im-zl **Repository Path**: panqing/im-zl ## Basic Information - **Project Name**: im-zl - **Description**: 构建一个千万级im系统 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2022-10-03 - **Last Updated**: 2022-10-03 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # ZL-IM ## 架构 这个系统里,有三部分,客户端,服务器,网关。 网关是web服务器,处理短连接。 服务器是tcp服务器,处理长连接。 ### 客户端 客户端的核心对象有 Client, ClientSession, Sender 在Client 发起登录,完成连接后 会创建Session, 并把 Session注入到Sender中去。 消息体的格式 每个消息 会有SessionId sequence type body 这四部分 ### 服务端 由于可能 a -> b 消息 a 与 A服务器存在长连接 ,但是 b却是与 B建立的长连接, 所以,这种情况下,发往A的消息需要 A再转发给B,这里就存在 A即时a的服务端 也是B的客户端。这时候,我们需要通过zk来监听服务端的上线,当一个服务端启动后 需要互相建立连接。 ## 流程 ### 连接 首先客户端要输入用户名 密码 向网关发起登录请求。登录成功,网关返回登录成功状态,返回一个服务器地址,和一个token。 然后客户端拿着token往服务器发起,连接,并发送登录请求。 服务器收到客户端发来的登录类型消息,会经过loginHandler的拦截处理,若登录成功,那么动态移除loginHandler,并加上 心跳, 聊天重定向handler。 ## 技术点 ### Zookeeper ### Protocol ### 缓存 系统采用三级缓存 #### 注意点 在编译的时候 注意 proto文件的版本 编译工具的版本 java支持的jar包的版本要一致。 ## 待开发 1. 路由服务的权限开发 2. 对于路由服务器考虑用http替代 自定义协议 放弃使用dubbo 换 spring cloud alibaba。 换成rest 对client改造 剥离 springboot 改造思路是能让idea 插件能使用