直播点名签到系统设计
一、设计思路
直播上课的时候如何对学生进行考勤是个问题,本文提供了一个方法仅供参考,就是在直播过程中不定期进行点名,点到的学生必须在30秒(可自定义)内进行回复,否则视为缺席。
点名使用websocket来发送和接收消息。
二、搭建websocket服务器
使用workerman作为websocket服务端。
Linux下启动workerman
启动 php start.php start -d
停止 php start.php stop
查看状态 php start.php status
Windows下启动workerman
首先需要把PHP添加到系统环境变量里面。
启动 右键点击start_for_win.bat,选择【以管理员身份运行】
停止 直接关闭进程
添加websocket事件
修改Applications\Chat\Events.php
添加以下事件
// 直播点名
case 'dianming':// 非法请求if(!isset($_SESSION['room_id'])){throw new \Exception("\$_SESSION['room_id'] not set. client_ip:{$_SERVER['REMOTE_ADDR']}");}$room_id = $_SESSION['room_id'];$client_name = $_SESSION['client_name'];$new_message = array('type'=>'dianming', 'from_client_id'=>$client_id,'from_client_name' =>$client_name,'to_client_id'=>'all','content'=>nl2br(htmlspecialchars($message_data['content'])),'time'=>date('Y-m-d H:i:s'));return Gateway::sendToGroup($room_id ,json_encode($new_message));
// 直播点名学员回应
case 'dianming_reply':// 非法请求if(!isset($_SESSION['room_id'])){throw new \Exception("\$_SESSION['room_id'] not set. client_ip:{$_SERVER['REMOTE_ADDR']}");}$room_id = $_SESSION['room_id'];$client_name = $_SESSION['client_name'];$new_message = array('type'=>'dianming_reply', 'from_client_id'=>$client_id,'from_client_name' =>$client_name,'to_client_id'=>'all','content'=>nl2br(htmlspecialchars($message_data['content'])),'time'=>date('Y-m-d H:i:s'));return Gateway::sendToGroup($room_id ,json_encode($new_message));
然后重启workerman
三、控制端程序设计
效果如下图所示
点击【点名】按钮后通过websocket发送一条消息,消息内容包含被点名的学员ID或者其他标识,主要JS代码如下
//批量点名
function dianmingsome(){var checkednum = $("#list_form").find("input[name='memberid[]']:checked").length;if(checkednum==0){layer.msg("您还没有选择", {icon: 2});return false;}layer.load(0, {shade: [0.2, '#393D49']});var useridstr = ",";$("#list_form").find("input[name='memberid[]']:checked").each(function(index, elem){useridstr += elem.value +",";});var to_client_id = "all";var to_client_name = "所有人";ws.send('{"type":"dianming","to_client_id":"'+to_client_id+'","to_client_name":"'+to_client_name+'","content":"'+useridstr+'"}');layer.msg("点名消息已发送,请等待学员回应...", {icon: 1});layer.closeAll('loading');return false;
}
四、被点名端程序设计
效果如下图所示
被点名的学员收到消息后自动弹出提示框,并开始倒计时。
倒计时结束后提示框消失,无法再进行回应。
主要JS代码如下
//弹出层索引
var index11, index12;
//点名倒计时
var reply_timer, reply_timerb;
var leftseconds = 30;//被点名时
function dianming(from_client_id, from_client_name, content, time){if(content===undefined){return false;}if(content.indexOf(","+ client_userid +",")>=0){leftseconds = 30;clearInterval(reply_timer);clearInterval(reply_timerb);index11 = layer.confirm('你被点名了,请在<span class="layui-badge">'+ leftseconds +'</span>秒内回应,否则视为缺席。', {title:'点名时间', btn: ['确定回应','取消']}, function(){clearInterval(reply_timer);clearInterval(reply_timerb);dianming_reply();dianming_close();},function(){clearInterval(reply_timer);clearInterval(reply_timerb);dianming_close();});reply_timer = setTimeout(function(){dianming_close();}, 30000);reply_timerb = setInterval(function(){leftseconds--;if(leftseconds<=0){clearInterval(reply_timerb);dianming_close();}$(".layui-layer-content").html('你被点名了,请在<span class="layui-badge">'+ leftseconds +'</span>秒内回应,否则视为缺席。');}, 1000);}
}//回应点名
function dianming_reply(){var to_client_id = "all";var to_client_name = "所有人";$.ajax({url: '/zhibod/dianming/replyok', type: 'POST',dataType: "json", data: {"zhiboid":zhiboid},beforeSend: function(){layer.load(0, {shade: [0.2, '#393D49']});},success: function(result){if(result.code=="success"){ws.send('{"type":"dianming_reply","to_client_id":"'+to_client_id+'","to_client_name":"'+to_client_name+'","content":"'+client_userid+'"}');layer.msg("回应成功", {"icon":1});}else{layer.msg(result.msg, {"icon":2});}},error: function(){layer.msg("系统错误,请联系管理员", {"icon":2});},complete: function(){layer.closeAll('loading');}});
}//关闭点名
function dianming_close(){layer.close(index11);
}
回应成功后控制端的点名状态会自动更新。
直播点名签到系统设计相关推荐
- 基于微信小程序的课程点名签到系统设计与实现 报告+项目源码及数据库文件
题目:微信点名系统小程序 目录 第一节 系统分析与设计 1.1 需求分析 1.2 数据库设计 1.2.1 数据库模型图(初步设计) 1.3 系统功能设计 第二节 系统开发及实现 2.1 系统开发平台及 ...
- 计算机毕业设计android的手机点名签到学生请假考勤系统app(源码+系统+mysql数据库+Lw文档)
项目介绍 完成基于安卓的点名签到学生请假考勤系统的设计和开发.有效地实现学生考勤信息管理的信息化,减轻管理人员的工作负担,高效率.规范化地管理大量的学生考勤信息,并避免人为操作的错误和不规范行为.运用 ...
- 基于Android的手机点名签到学生请假考勤系统
移动互联网与3G技术的不断成熟的今天,高校校园信息化仅仅表现在高校数字化平台,已经不能满足当今的需求了.现在高校学生迟到,旷课时有发生,传统的点名方式花费了大量时间,效率低下,还占用上课时间,当然也不 ...
- 会议签到web_基于Web的网络签到系统设计与实现
基于 W e b 的网络签到系统设计与实现 张艳华, 郑丽英 (兰州交通大学 光电技术与智能控制教育部重点实验室, 甘肃 兰州 730030 ) 摘 要: 针对机关单位考勤的需要, 本文讨论了基于 W ...
- 《Python与硬件项目案例》— 基于Python的口罩检测与指纹识别签到系统设计
<Python与硬件项目案例>- 基于Python的口罩检测与指纹识别签到系统设计 目录 <Python与硬件项目案例>- 基于Python的口罩检测与指纹识别签到系统设计 1 ...
- java基于微信小程序的课堂点名签到请假系统 uniapp 小程序
随着我国教育改革的开放,以及各大高校不断的扩招,大学生的数量也在不断的增加.相对应的就需要各大高校在管理方面提高.很明显传统的教育管理模式已经不能够适应当代高速发展的教育速度.所以一定要通过现代化,智 ...
- 基于微信小程序的签到系统设计与实现-计算机毕业设计源码+LW文档
摘要 随着Internet的发展,人们的日常生活已经离不开网络.未来人们的生活与工作将变得越来越数字化,网络化和电子化.网上管理,它将是直接管理签到系统app的最新形式.本论文是以构建签到系统app为 ...
- 上学最恐怖的事在于上课前点名签到,尤其这个签到脚本更恐怖。
前言 开学已经有一段时间了,大学生活不能缺席的莫过于上!课!签!到! 随着科技的发展老师和学生思维的改变,二维码签到.手势签到.位置签到 -- 我们总能看见一些,常规or非常规.传统or新潮的点名方式 ...
- 2806基于微信小程序的签到系统设计与实现/毕设
目前国内高等院校在校学生多,教室多,为保证教学质量和学生出勤率,多数学校通过教师现场点名的形式考察学生出勤情况,这显然会占用大量上课时间.调查说明,现在大学生上课约有六成的学生每十分钟查看一次手机,这 ...
最新文章
- The restricted headers are:
- php扩展 zval_copy_ctor,zend api扩展的php对象的autoload工具
- 【翻译】CodeMix使用教程(三):Emmet
- 阿里云引领云原生进化,智能、互联、可信三位一体
- python chrome headless_Chrome Headless模式(二)——Python+selenium+headerless
- Hello Cnblog!
- 【APICloud系列|13】移动端适配通揽
- 《MySQL——索引笔记》
- c语言 用一维数组存储二叉树,用一维数组存储二叉树时,总是以前序遍历顺序存储结点。( ? )...
- 转载C#中的特性(Attributes)
- 【开发者portal在线开发插件系列三】字符串 及 可变长度字符串
- mysql hy093_请问SQLSTATE [HY093]:参数号无效:未定义参数
- 北京可以备案什么域名
- iphone9发布_苹果将发布iPhone9!配置升级价格公道,期待官网亮相!
- 时间基准控件外观的设置纠正
- 嵌入式成长轨迹36 【Zigbee项目】【单片机基础】【单片机SD卡】
- 计算机二级考试科目vfp,计算机二级考试科目及内容
- 用java异或的方式去实现简单的视频加密
- Java 将文件转换写入byte[]
- Job for network.service failed because the control process exited with error code. See “systemctl st