连接管理、心跳、重连与流量控制
WebSocket、消息队列与实时通信#Python全栈#第十六阶段#WebSocket、消息队列与实时通信#连接管理、心跳、重连与流量控制约 789 字 · 2 分钟阅读
追问显示点击任意追问卡片可收起 / 展开
怎样设计单进程内的连接管理器?
追问 按用户、连接和房间分别建立什么索引?如何支持一个用户多设备、多标签页,以及连接退出后的索引清理?
房间广播时,一条连接发送失败应怎样影响其他连接?
追问 顺序逐个发送会遇到什么问题?并发发送怎样设置数量与超时上限,遍历过程中删除连接怎样避免集合变化错误?
如何设计心跳间隔、超时判定与失联清理?
追问 网络抖动、浏览器后台运行和移动端休眠如何影响判断?怎样避免过早踢掉用户,也避免失效连接长期占用资源?
前端怎样实现 WebSocket 自动重连?
追问 指数退避、随机抖动、重试上限和稳定连接后的计数重置怎样配合?身份失效或明确禁止连接时是否仍应持续重试?
用户离开页面时,怎样避免重复连接和重连定时器泄漏?
追问 Vue/React 组件卸载、页面重新进入和旧连接的关闭回调如何协调?怎样区分主动关闭与需要重连的异常断开?
前端连接状态应怎样呈现给用户?
追问 连接中、已连接、恢复中和离线状态怎样切换?断线期间的输入应缓存、禁止提交还是提供普通接口降级,如何避免误导成功提示?
为什么每条连接需要有界的发送缓冲,而不能无限积压?
追问 慢客户端会怎样消耗内存?进度事件、聊天记录和关键状态各适合合并、丢弃、断开还是转历史查询?
浏览器 WebSocket 的 bufferedAmount 能帮助判断什么?
追问 它反映本地待发送量还是服务器业务处理进度?怎样设置发送节奏与缓冲上限,为什么不能把数值降为零当成业务确认?
如何限制一个用户或来源建立过多连接、发送过多消息?
追问 连接数、消息频率、消息大小和房间数量分别在哪里限制?多实例下怎样协同,超限后怎样反馈并恢复?
服务准备关闭或滚动更新时,现有长连接怎样退出?
追问 怎样停止接受新连接、通知重连、限定排空时间并关闭任务?为什么无法依靠无限等待所有用户主动离线完成发布?
浏览器核对资料: WebSockets 标准:浏览器 API。