add文档

This commit is contained in:
anlicheng 2025-10-13 17:10:24 +08:00
parent d9614ae209
commit 34d1de4be3

132
README.md
View File

@ -1,13 +1,127 @@
efka # ws_channel 模块 API 文档与交互逻辑
=====
An OTP application ## 注意websocket的数据格式为: text
1. 先解决数据的上行问题 ## 一、模块概述
2. todo list `ws_channel` 是基于 Erlang + Cowboy WebSocket 实现的 MQTT 相关交互模块,主要用于服务注册、主题订阅、指标数据上报、事件发送及消息广播等功能,通过 WebSocket 协议实现客户端与服务端的实时双向通信。
要解决连接断开重新连接的问题 !!!
Build
-----
$ rebar3 compile ## 三、核心 API 方法
客户端通过发送 **JSON 格式文本消息** 与服务端交互,消息格式遵循 JSON-RPC 风格(包含 `id``method``params` 字段)。
### 1. 服务注册register
#### 功能
注册服务并建立客户端与服务进程的关联,是后续操作(订阅、上报数据等)的前提。
#### 请求格式
```json
{
"id": <整数请求唯一标识>,
"method": "register",
"params": {
"service_id": <二进制服务唯一标识必填>,
"meta_data": <映射服务元数据可选>,
"container_name": <二进制容器名称可选>
}
}
```
#### 响应格式
- 成功响应:
```json
{
"id": <与请求id一致>,
"result": "ok"
}
```
- 失败处理:服务端直接关闭连接(因 `attach_channel` 失败)
### 2. 主题订阅subscribe
#### 功能
订阅指定主题,后续可接收该主题的广播消息。
#### 请求格式
```json
{
"id": <整数请求唯一标识>,
"method": "subscribe",
"params": {
"topic": <二进制订阅的主题名称必填>
}
}
```
#### 响应格式
- 成功响应:
```json
{
"id": <与请求id一致>,
"result": "ok"
}
```
- 失败响应:
```json
{
"id": <与请求id一致>,
"error": {
"code": -1,
"message": "错误描述"
}
}
```
#### 处理逻辑
通过 `efka_subscription:subscribe(Topic, self())` 完成订阅,订阅成功后客户端会收到该主题的广播消息。
### 3. 指标数据上报metric_data
#### 功能
向服务进程上报设备指标数据。
#### 请求格式
```json
{
"method": "metric_data",
"params": {
"device_uuid": <二进制设备唯一标识必填>,
"route_key": <二进制路由键必填>,
"metric": <指标数据必填>
}
}
```
#### 响应处理
服务端接收后无返回消息(处理逻辑:`efka_service:metric_data(ServicePid, DeviceUUID, RouteKey, Metric)`
### 4. 事件发送event
#### 功能
向服务进程发送事件消息。
#### 请求格式
```json
{
"method": "event",
"params": {
"event_type": <二进制事件类型必填>,
"body": <事件内容必填>
}
}
```
## 五、基础交互协议
1. **Ping/Pong 心跳**
- 客户端发送 `ping` 消息
- 服务端回复 `pong` 消息,维持连接
2. **未知消息处理**
- 客户端发送未定义格式的消息时,服务端记录错误并关闭连接
## 七、典型交互流程
1. 客户端发起 WebSocket 连接
2. 客户端发送 `register` 请求完成注册
3. 客户端发送 `subscribe` 请求订阅目标主题
4. 客户端通过 `metric_data` 上报指标数据 / 通过 `event` 发送事件
5. 服务端向客户端推送已订阅主题的消息(`publish` 方法)
6. 连接关闭(主动断开或异常终止)