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