消息协议、客户端确认与断线恢复
WebSocket、消息队列与实时通信#Python全栈#第十六阶段#WebSocket、消息队列与实时通信#消息协议、客户端确认与断线恢复约 764 字 · 2 分钟阅读
追问显示点击任意追问卡片可收起 / 展开
实时业务消息应包含哪些公共字段?
追问 event_id、type、version、业务对象标识、序号和时间各解决什么问题?哪些身份与权限字段应由服务器补充而不是信任客户端?
发送聊天消息时,客户端临时标识与服务器消息标识怎样配合?
追问 网络超时后重发如何识别同一次提交?乐观显示的记录怎样替换为已保存记录,重复确认如何避免重复插入?
为什么 WebSocket send 调用成功不能直接把消息标记为“已读”?
追问 已接受、已保存、已送达和已读分别需要什么证据?如果设计应用层 ACK,它确认的是哪个状态,谁有权上报?
应用层消息确认应怎样设计重试与去重?
追问 确认本身丢失时会发生什么?确认标识、等待时间、重发上限和去重记录保留期如何协调?
怎样设计用户断线后的消息补齐接口?
追问 游标按用户还是房间保存,分页和权限怎样控制?怎样区分消息从未保存、已经保存但未推送,以及超过保留期?
拉取历史和订阅实时事件之间怎样避免漏消息或重复消息?
追问 先拉历史再订阅、先订阅再拉历史分别有什么窗口?怎样使用快照水位、缓冲和事件去重完成切换?
怎样定义和维护一个房间内的消息顺序?
追问 为什么仅依靠客户端时间或数据库自增 ID 的分配顺序不一定能代表提交顺序?多个生产者、事务回滚与并行处理如何影响序号方案?
前端收到乱序或重复状态事件时怎样更新界面?
追问 版本号、状态机和业务对象当前状态怎样配合?报告已完成后又收到旧的“处理中”事件,怎样防止界面回退?
已读游标、未读数量和多设备同步怎样设计?
追问 某设备推进游标后其他设备如何更新?消息删除、不可见记录和重复事件怎样影响未读统计,怎样与数据库结果对账?
消息协议升级时,怎样兼容仍然在线的旧客户端?
追问 新增字段、删除字段和新增事件类型分别怎样处理?怎样明确版本范围、记录未知事件,并避免一次发布使所有旧页面失效?