关于用户掉线的处理机制.md
3.36 KB
消息断线的检测
采用客户端向公共群发心跳消息的方式,不用服务器端维持。
- 具体为每隔10(暂定)秒发送一条自定义消息
{ "type":"heartbeat", "parameter":"7"(用户Id) }
- 接收方设定对方的生存时间为30秒(暂定),开始倒计时,
- 倒计时一旦结束,则认为对方处于offline的状态,或者本方的网络出了问题,给予提示。
- 每收到一次心跳或者一次来自对方的消息,则把对方生存时长重置为30秒,重新启动倒计时。
- 如果检测到对方是从离线状态恢复到在线状态,在提示当前用户,对方已经恢复在线。
由于断线造成联络的中断,状态信息都在内存中。
由于崩溃退出,再次进入需要读取缓存的信息。
-
由于网络断线原因引起的音视频无法对话
双方都会收到音视频事件更新。 首先检查自己的网络状态, 如果网络状态为断线,则提醒客户端检查网络连接 如果网络正常,则出现提示画面,提示有可能对方出了问题
-
如果是由于崩溃退出
需要把当前的在线授课状态信息持久化(正常退出课程的时候进行清理) 客户端再次进入后,检查是否存在授课缓存文件,如果存在,则提示,您有一个进行中的课程,是否需要进入
待讨论:如果用户不小心点击了取消,是否应该有个地方让用户重新进入课程。
进入之后,进入上一次退出的页面。 对于教师端,进入页面后,重新发送该页信息。 对于学生端,进入页面后,询问服务器是否本次课程已经结束。 如果未结束,则向教师请求当前最新的页面,教师端再次发送当前的页面后,也重置自身的页面到初始状态。
* 关于在线授课状态的保存
在本地保存一份缓存文件,在正常进入课程前清理之前可能遗留的文件, 在授课过程中保存缓存信息,在授课正常结束之后清除缓存信息。
缓存信息项目包括
* 当前学习状态的保存(教师版缓存,跟学习历史一样的逻辑,安卓版需要追加学习历史相关的逻辑)
* 当前的发送页索引(主要供教师端发送新页的时候,便于设置正确的发送页索引)
* 推送信息的保存(学生端保存,里面包含了公共群Id,聊天室Id)
* 通讯所需的公共群Id,聊天室Id的保存(教师端)
* 关于学生端向教师端重新请求页面的命令
{ type:"flow" command:"requestCoursePage" }
##在线授课断网然后再恢复页面同步处理
######学生端
(1)断网后给断网提示,恢复网络后发送消息到教师端,格式如下:
{ type = flow; command = requestCoursePage;//命令,采用异常崩溃退出的命令 parameter = 0; //0-断网 1-崩溃 }
教师端收到此消息后,提示:学生已重新连接(HUD 或 其他方式),重发当前页面(即重新创建一个新的当前页面,根据以前的消息机制,教师会发这个新的页面到学生端),这样保持了学生,老师的同步也使页面动作重置
######教师端
(1)教师端目前只给了网络的变化动态,恢复网络后未有重发机制。(教师端可手动滑动页面保持同步,没必要再做重发机制)