title: "HTTP based notification" date: 2023-10-12T15:13:50+07:00
在常见的 REST API 中,有时会需要服务端“主动”通知客户端某个 event 的发生或信息产生变更,这时候会想到用 websocket 实现,但 websocket 会产生比较大的服务端开销。
传统的做法为客户端定时请求特定接口,在有数据的时候处理
一般的 REST 协议都会采用统一的格式,比如
{
"code": 0,
"data": {
}
}
code 表示错误码,data 表示协议数据
如果服务端设计为,任何对用户数据变更的跟踪以及新的 event 的跟踪都汇集起来,在用户有任意最新的请求的时候检查某标记, 模拟实时推送的效果。在多数服务端 API 框架中,这可以作为一个 router 的 middleware 来实现。新的协议如下
{
"code": 0,
"data": {
},
"notify": {
"type": "sys",
"data": {
}
}
}
event 作为可选字段,客户端检查如果为 null / empty / undefined 则表示没有任何事件
客户端需要解析出 notify 数据后保存在 store 中,在需要的页面显示出来即可。