You need to sign in or sign up before continuing.
关于用户掉线的处理机制.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 或 其他方式),重新创建当前页面,并把页面信息发给学生,使得师生端同步

教师端
  • 如果是从崩溃中恢复,则从教课历史中进入上一次退出时的页面,进入后,把该页面信息发给学生
  • 如果是由于网络问题的恢复,则重新创建当前页面,并把页面信息发给学生,使得师生端同步