[功能] - 展示在线人数
Description
what
时空伴随,增加用户黏度
“竟然还有这么多人在学习,可不能落下” / “竟然没啥人,我要偷偷卷”
像B站视频左下角一下,展示多少用户正在观看
how
参考 https://docs.nestjs.com/websockets/gateways
好功能!顶
这个功能我喜欢
其作为用户,我并不关心当前课程在学的精确人数,有个大致数据就行
我觉得可以做个 kv 结构
k: 课程ID v: 人数
有人学课 发请求 就加一个人。 有人关闭浏览器,n秒 不动,更换课程,发请求 就减一个人
然后单独用个 查询接口去查,这个接口还可以按时间做缓存
在适合时机拿下数据就行。比如 用户刚进入课程查一次,B站 好想就是这样的
这样 实时性不高,也实现这个功能,服务器压力也小
这个功能的话其实有点像站内信消息数量的推送,之前做过相关的内容,我觉得如果要做的话,基本上就是Websocket、轮询、SSE、MQTT这些方案,考虑到功能需求复杂程度,我觉得使用SSE方案就足够了; SSE 是 HTML5 中的 EventSource API,通过服务器推送实现实时通信。客户端从服务端订阅一条“流”,之后服务端可以发送消息给客户端直到服务端或者客户端关闭该“流”,所以 EventSource 也叫作 SSE(server-sent-event),用于在客户端和服务器之间建立持久的、单向的通信连接。 它基于 HTTP 协议,通过服务器推送的方式向客户端发送实时事件通知。客户端通过添加事件侦听器来捕获事件并执行相应的操作。 与 WebSocket 相比,EventSource 提供了一种简单而可靠的单向通信机制(服务器->客户端),实现简单,适用于许多实时应用场景。 ChatGPT 就是采用的 SSE。