# mm WebSocket 开发指南

## 规则（Rules）

- WebSocket 在 `config.json` 的 `web.socket` 中启用
- 在 App 的 `_init` 中通过 `$.admin.socket()` 注册并绑定到 Koa 适配器
- WebSocket 处理器位于 `app/{模块名}/event_api/ws/` 下

## 方法（Methods）

### 步骤1：启用 WebSocket

在 `config.json` 中：

```json
"web": {
    "socket": true,
    "port": 8200
}
```

`socket: true` 启用 WebSocket，`port` 为可选（默认使用 web.port）。

### 步骤2：注册 WebSocket

在 App 的 `_init` 中：

```javascript
async _init(option) {
    var msg = null;
    var config = this.getServer().config;

    if (config.web.socket) {
        var socket = $.admin.socket('sys', 'WebSocket');
        await socket.call('update', 'app/');
        await socket.runAll('init');

        var server = this.getServer();
        if (server.adapter && server.adapter.ws) {
            server.adapter.ws.use(socket.run.bind(socket));
        }
        $.log.info("WebSocket 已启动!");
    }

    return msg;
}
```

### 步骤3：编写 WebSocket 处理器

在 `app/{模块名}/event_api/ws/` 下创建事件处理器。

## 技巧（Tips）

- WebSocket 处理器格式与普通事件处理器相同（event.json + main.js）
- 通过 WebSocket 可实现实时推送、在线聊天等功能
- 参考实现：`app/sys/index.js` 中的 `_init` 方法
