### What's Dim? --- > 基于 **netty** 的服务中间件 #### 核心功能 实现客户端和服务端的tcp长链接通信 完成数据交换 #### 基础功能 - [x] 动态调整服务端设置提高性能 - [x] 心跳检测 - [x] 闲时检测 清除或处理长时间无响应客户端 - [x] 自动编/解码 - [x] 自定义数据包编码 实现 256 种操作的解析(可拓展) - [x] 支持任意类型数据的发送,配合操作解析 - [x] 基于JWT 的登录认证 - [x] 授权检查,清除未授权客户端 - [x] 消息确认ACK - [x] 非主动下线的断线检测与重连 - [x] 支持客户端查询与下线等操作 - [x] 微服务化 支持其他服务动态调用 - [x] 支持websocket - [ ] 支持多种序列化方式(现暂json) - [ ] ssl 通道加密 保证数据安全 - [ ] data数据加密 保证数据安全 - [ ] ID 规则设计 便于后期分布式拓展 - [ ] session信息持久化或缓存 - [ ] 异常监控 便于错误发现 - [ ] 日志 便于错误处理 - [ ] 线程池 提高执行效率 缓解通道压力 - [ ] 数据压缩 提高传输效率 #### 拓展功能 RPC IM #### 客户端 socket 对接指南 1. ip:xx.xx.xx.xx port:0000 2. 定时心跳包的发送 3. 使用common包中的通讯协议 4. 自行补充main方法放入对应线程 5. 登录传的token为平台统一 access_token 6. 消息推送接收后自行补充对应业务逻辑 7. 异常重连机制和连接类似 8. 通过SessionUtil管理服务端信息和消息发送 #### web端 websocket 对接 1. websocket连接成功后首先发送登录请求 然后 判断返回判断登录状态 2. 根据类别判断要处理的消息类型进行展示 3. 数据请求和返回都为字符串需用json进行解析 4. 补充断线重连机制 ##### 登录请求: | 字段 | 类型 | 说明 | 示例 | 是否必填 | | ------- | ------ | ----- | ------------------------ | -------- | | command | string | 命令 | LOGIN_REQUEST | 是 | | data | string | token | 登录接口获取access_token | 是 | ##### 登录返回: | 字段 | 类型 | 说明 | 示例 | 是否必填 | | ------- | ------- | -------- | ------------------- | -------- | | command | int | 命令 | 2(登录返回) | 是 | | success | boolean | 是否成功 | true | 是 | | reason | string | 原因 | token错误,连接失败 | 否 | ##### 消息返回: | 字段 | 类型 | 说明 | 示例 | 是否必填 | | ------- | ------ | -------------- | ------------ | -------- | | command | int | 命令 | 91(消息推送) | 是 | | data | 泛型 | 根据命令的数据 | | 是 | | id | string | 消息id | | 是 | ##### 消息确认请求: | 字段 | 类型 | 说明 | 示例 | 是否必填 | | ------- | ------ | ---------- | -------- | -------- | | command | string | 命令 | CONFIRM | 是 | | data | string | message_id | 消息体id | 是 | **请求示例:** ```json { "command":"LOGIN_REQUEST", "data":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjI1NTk1NDY5MDMsInVzZXJfbmFtZSI6ImpnemgwMSIsImF1dGhvcml0aWVzIjpbIlJPTEVfT1BFUkFUT1IiXSwianRpIjoiZjA2NmQxMGMtZWVmMy00Mzk4LTg0NjctOTNiNGYwNWRiMTEwIiwiY2xpZW50X2lkIjoiYW5waW4tb3BzLXBjIiwic2NvcGUiOlsic2VsZWN0Il19.frUrkTEJaIwo-ZeMbs3L9UNmxr26WHOi52TGQWnSu00" } { "command":"CONFIRM", "data":"59232dfc59d24eb2868e740afc7074ae" } ``` **返回示例:** ```json { "command": 2, "session": { "platform": "1", "sessionId": "ec89a6f9a8cc4d8291bffe0f3aa187e6", "userId": "jgzh01" }, "success": true } { "command": 30, "data": { "A": 1, "B": "vvv" }, "id": "999c2f55176c4136ba6a4b9ac28f9fc4" } ``` **代码示例:** ```html Web Socket Test

Output

```