earthworm icon indicating copy to clipboard operation
earthworm copied to clipboard

[功能] - 展示在线人数

Open zuowendong opened this issue 1 year ago • 4 comments

Description

what

时空伴随,增加用户黏度

“竟然还有这么多人在学习,可不能落下” / “竟然没啥人,我要偷偷卷”

像B站视频左下角一下,展示多少用户正在观看

image

how

参考 https://docs.nestjs.com/websockets/gateways

image

zuowendong avatar Apr 11 '24 03:04 zuowendong

好功能!顶

Jayden12138 avatar Apr 12 '24 05:04 Jayden12138

这个功能我喜欢

Hazel-Lin avatar Apr 16 '24 07:04 Hazel-Lin

其作为用户,我并不关心当前课程在学的精确人数,有个大致数据就行

我觉得可以做个 kv 结构

k: 课程ID v: 人数

有人学课 发请求 就加一个人。 有人关闭浏览器,n秒 不动,更换课程,发请求 就减一个人

然后单独用个 查询接口去查,这个接口还可以按时间做缓存

在适合时机拿下数据就行。比如 用户刚进入课程查一次,B站 好想就是这样的

这样 实时性不高,也实现这个功能,服务器压力也小

baboon-king avatar Apr 19 '24 07:04 baboon-king

这个功能的话其实有点像站内信消息数量的推送,之前做过相关的内容,我觉得如果要做的话,基本上就是Websocket、轮询、SSE、MQTT这些方案,考虑到功能需求复杂程度,我觉得使用SSE方案就足够了; SSE 是 HTML5 中的 EventSource API,通过服务器推送实现实时通信。客户端从服务端订阅一条“流”,之后服务端可以发送消息给客户端直到服务端或者客户端关闭该“流”,所以 EventSource 也叫作 SSE(server-sent-event),用于在客户端和服务器之间建立持久的、单向的通信连接。 它基于 HTTP 协议,通过服务器推送的方式向客户端发送实时事件通知。客户端通过添加事件侦听器来捕获事件并执行相应的操作。 与 WebSocket 相比,EventSource 提供了一种简单而可靠的单向通信机制(服务器->客户端),实现简单,适用于许多实时应用场景。 ChatGPT 就是采用的 SSE。

wty9sky avatar Apr 24 '24 04:04 wty9sky