Socket.D 为固定长帧设计。采用两种风格定义：

* 简码：只有 flag 字段（止前只有 Ping, Pong）
* 全码：所有字段必须有或者空占位（字符串为""，字节数组为[]）

协议实现注意：

* String 的“字符集”由实现框架通过配置决定
* 当使用 udp 传输时，帧长度不能超过 1.4K


下面主要采用 <mark>“逻辑结构”</mark> 表述

### 1、连接帧

#### 10 Connect Frame

```
frame: {flag:10, message: {sid:"$sid", event:"", entity: {metaString:"Socket.D=1.0", data:$serverUrl}}}
```

* $sid，流标识（使用 guid）
* $serverUrl，服务端地址
* "Socket.D=1.0"，客户端协议版本号（目前只有 1.0）

#### 11 Connack Frame

```
frame: {flag:11, message: {sid:"$r.sid", event:"", entity: {metaString:"Socket.D=1.0", data:$r.data}}
```

* $r.sid，来源帧的 sid
* $r.data，来源帧的实体 data
* "Socket.D=1.0"，服务端协议版本号（目前只有 1.0）


“Connack”，相当于是把 "Connect" 的数据回发，并告知服务端协议版本号

### 2、心跳帧

#### 20 Ping Frame

```
frame: {flag:20}}
```

"Ping" 帧，消息部分不需要。可省点流量

#### 21 Pong Frame

```
frame: {flag:21}}
```

"Pong" 帧，消息部分不需要。可省点流量


### 3、辅助帧

#### 30 Close Frame

```
frame: {flag:30, message: {sid:"$sid", event:"", entity: {metaString:"code=$code", data:""}}}
```

* $sid，流标识（使用 guid）
* $code，关闭代码（1000: 开始关闭，提示不要用这个连接发数据；1001: 关闭，关闭连接并触发 onClose 事件）

#### 31 Alarm Frame

```
frame: {flag:31, message: {sid:"$r.sid", event:"$r.event", entity: {metaString:"$r.metaString", data:"$alarm"}}
```

* $r.sid，来源帧的 sid
* $r.event，来源帧的 event
* $r.metaString，来源帧的 metaString
* $alarm，告警信息

### 4、消息帧

#### 40 Message Frame

```
frame: {flag:40, message: {sid:"$sid", event:"$event", entity: {metaString:"$metaString", data:$data}}}
```

* $sid，流标识（使用 guid）
* $event，事件
* $metaString，发送实体的元信息字符串（urlQueryString 格式，例：a=1&b=2）
* $data，发送实体的数据

#### 41 Request Frame

```
frame: {flag:41, message: {sid:"$sid", event:"$event", entity: {metaString:"$metaString", data:$data}}}
```

* $sid，流标识（使用 guid）
* $event，事件
* $metaString，发送实体的元信息字符串（urlQueryString 格式，例：a=1&b=2）
* $data，发送实体的数据

#### 42 Subscribe Frame

```
frame: {flag:42, message: {sid:"$sid", event:"$event", entity: {metaString:"$metaString", data:$data}}}
```

* $sid，流标识（使用 guid）
* $event，事件
* $metaString，发送实体的元信息字符串（urlQueryString 格式，例：a=1&b=2）
* $data，发送实体的数据

#### 48 Reply Frame

```
frame: {flag:48, message: {sid:"$r.sid", event:"$r.event", entity: {metaString:"$metaString", data:$data}}}
```

* $r.sid，来源帧的 sid
* $r.event，来源帧的 event
* $metaString，答复实体的元信息字符串（urlQueryString 格式，例：a=1&b=2）
* $data，答复实体的数据

#### 49 End Reply Frame

```
frame: {flag:49, message: {sid:"$r.sid", event:"$r.event", entity: {metaString:"$metaString", data:$data}}}
```

* $r.sid，来源帧的 sid
* $r.event，来源帧的 event
* $metaString，答复实体的元信息字符串（urlQueryString 格式，例：a=1&b=2）
* $data，答复实体的数据
