关于用户掉线的处理机制.md
3.1 KB
消息断线的检测
采用客户端向公共群发心跳消息的方式,不用服务器端维持。
- 具体为每隔10(暂定)秒发送一条自定义消息
{ "type":"heartbeat", "parameter":"7"(用户Id) }
- 接收方设定对方的生存时间为30秒(暂定),开始倒计时,
- 倒计时一旦结束,则认为对方处于offline的状态,或者本方的网络出了问题,给予提示。
- 每收到一次心跳或者一次来自对方的消息,则把对方生存时长重置为30秒,重新启动倒计时。
关于中断的检查
- 任何一方超过规定时间后没有检测到心跳,都会提示连接中断
- 检测本地网络连接,如果本地网络正常,则记录中断原因不是由于自己造成的,如果本地网络不通,则记录中断原因是自己造成的。
- 提示连接中断后,本地会启动5分钟倒计时,时间到了之后上报给服务器(需要服务器提供接口),服务器记录旷课情况,客户端退出课程。
- 如果在连接中断5分钟之内,心跳恢复,则停止5分钟倒计时
- 心跳恢复后,如果中断原因是自己造成的,则尝试进行师生端的页面同步
- 心跳恢复后,提示重新连接成功。
由于崩溃退出的处理
需要把当前的在线授课状态信息持久化(正常退出课程的时候进行清理)
客户端再次进入后,检查是否存在授课缓存文件,如果存在,则向服务器询问该课程是否可以恢复,如可以则提示,您有一个进行中的课程,是否需要进入
待讨论:如果用户不小心点击了取消,是否应该有个地方让用户重新进入课程。
在本地保存一份缓存文件,在正常进入课程前清理之前可能遗留的文件,
在授课过程中保存缓存信息,在授课正常结束之后清除缓存信息。
缓存信息项目包括
- 当前学习状态的保存(教师版缓存,跟学习历史一样的逻辑,安卓版需要追加学习历史相关的逻辑)
- 当前的发送页索引(主要供教师端发送新页的时候,便于设置正确的发送页索引)
- 推送信息的保存(学生端保存,里面包含了公共群Id,聊天室Id)
- 通讯所需的公共群Id,聊天室Id的保存(教师端)
关于客户端从断线状态恢复
客户端先向服务器询问此次课程可以恢复,如果可以则进行以下的恢复动作,如果不可以,则提示用户,课程已经结束,同时退出在线授课状态。
学生端
发送获取教师端当前页面的请求
{
type = flow;
command = requestCoursePage;
}
教师端收到此消息后,提示:学生已重新连接(HUD 或 其他方式),重新创建当前页面,并把页面信息发给学生,使得师生端同步
教师端
- 如果是从崩溃中恢复,则从教课历史中进入上一次退出时的页面,进入后,把该页面信息发给学生
- 如果是由于网络问题的恢复,则重新创建当前页面,并把页面信息发给学生,使得师生端同步