该系统可以同客户端建立 SSE 长连接,不仅该系统自己可以向客户端推送数据,还支持调用接口推送数据给特定的客户端。
- Node >= 8.0
- PM2
设置配置文件: 将 config/index.js.example,文件重命名为 index.js。
本地开发:
$ npm run dev # 启动成功后打开 http://localhost:3000 进行调试生产部署:
$ npm start
客户端调用接口以建议和该系统间的长连接。
客户端 cookie 中必须使用 ssid 字段作为用户的唯一标识
| 调用方式 | 入参 | 接口 |
|---|---|---|
| SSE | 无(需携带cookie,且 cookie 中必须包含 ssid 字段) | /api/v1/acceptdata |
SSE 事件:
| 事件名称 | 描述 | 返回值 |
|---|---|---|
| connected | 长连接连接成功时返回 | JSON { "code": "0", msg: "success" } |
| message | 数据推送 | JSON 或 String |
var source = new EventSource('/api/v1/alive/acceptdata');
source.addEventListener('open', function (event) {
console.log('open');
}, false);
source.addEventListener('message', function (event) {
console.log(event);
console.log('message');
}, false);
source.addEventListener('error', function (event) {
console.log('error');
});Node 会将请求来的数据通过长链接透传至客户端上。
| 调用方式 | 入参 | 接口 |
|---|---|---|
| post | 见下表 | /api/v1/pushdata |
入参:
| 参数名 | 类型 | 描述 |
|---|---|---|
| ssid | String | 数据推向的客户端 ssid |
| data | String | 下发的数据 |
返回值:
| 参数名 | 类型 | 描述 |
|---|---|---|
| code | String | code 码 |
| msg | String | Code 对应的消息 |
code 值:
| code 值(都是字符串类型) | 备注 |
|---|---|
| 0 | 成功 |
| 1 | 参数错误 |
| 10 | 未发现对应的客户端长连接 |
| -1 | 系统异常 |
由于存在客户端与服务器的长连接是一对一的,当调用推送数据接口时,就存在一个内网转发请求到与客户端建立长连接的服务器上。
幸运的是,这些工作在这个系统中都已经被实现了,只不过需要借助于 Redis。如果你需要启动该功能请在 config/index.js 中设置 isUseRedis 的值为 true,同时在 RedisOpts 配置 Redis 相关参数。