正在打开每日关注
正在打开每日关注
讲解以异步请求实现扫码登录长轮询,并用 Redis 通知结果,重点在避免容器线程被长时间占用。
存储在Redis内并设置这个key的失效时间
视频以扫码登录为例,讲解前端持续发起长轮询、后端在状态变化或超时后才返回结果的实现思路。作者强调,不应让容器主线程长期阻塞,而应将等待与查询放到异步处理和自定义业务线程池中。
流程包括:服务端生成唯一 ID、在 Redis 中保存“未扫描”状态并设置失效时间;前端携带该 ID 发起长轮询;手机扫码后提交手机端 token 与 ID,服务端生成 PC 端 token、写入 Redis 并发布 topic 消息;订阅方据此完成异步结果并返回前端。视频还通过本地 Map 跟踪当前节点待处理的 ID,并在超时或完成后清理。
异步返回、超时回调和清理逻辑是避免连接与主线程堆积的核心。值得继续审核的是线程池容量、超时与重试策略、Redis 消息订阅的可靠性,以及多实例下本地 Map 与请求归属的一致性。视频最后也指出,自定义业务线程池在高峰时仍可能耗尽,但未给出治理方案。