本文介绍远程监考服务端集成示例源码说明。
项目框架
- 基于主流的Java8 + Springboot2搭建框架。 
- 基于Mybatis plus作为Repository层选型。 
- 基于SpringSecurity + JWT实现权限控制。 
项目部署
前提条件
创建数据库
当配置好DB后,手工创建数据库表。以MySQL为例,建表语句为:
CREATE TABLE `cheat_config` (
  `id` bigint NOT NULL AUTO_INCREMENT,
  `exam_id` varchar(256) NOT NULL COMMENT '考试ID',
  `data` text NOT NULL COMMENT '具体配置,JSON串',
  `creator` varchar(256) DEFAULT NULL COMMENT '创建者',
  `created_at` datetime NOT NULL COMMENT '创建时间',
  `updated_at` datetime NOT NULL COMMENT '修改时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `exam_id` (`exam_id`),
  KEY `idx_create_at` (`created_at`)
) ENGINE=InnoDB;
CREATE TABLE `cheat_record` (
  `id` bigint NOT NULL AUTO_INCREMENT,
  `exam_id` varchar(256) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '考试ID',
  `room_id` varchar(256) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '考场id',
  `user_id` varchar(256) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '考生id',
  `detect_type` varchar(256) NOT NULL COMMENT '检测类型',
  `detect_time` datetime NOT NULL COMMENT '检测时间',
  `is_main_monitor` varchar(256) NOT NULL COMMENT '考生主机位/副机位',
  `extra_info` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '额外信息存储',
  `created_at` datetime NOT NULL COMMENT '创建时间',
  `updated_at` datetime NOT NULL COMMENT '修改时间',
  PRIMARY KEY (`id`),
  KEY `idx_exam_id` (`exam_id`),
  KEY `idx_create_at` (`created_at`),
  KEY `idx_room_id` (`room_id`) USING BTREE
) ENGINE=InnoDB;
CREATE TABLE `exam_room_infos` (
  `id` varchar(256) NOT NULL,
  `name` varchar(256) DEFAULT NULL,
  `exam_id` varchar(256) DEFAULT NULL,
  `status` bigint DEFAULT NULL,
  `audio_status` bigint DEFAULT NULL,
  `im_group_id` varchar(256) DEFAULT NULL,
  `create_teacher` varchar(256) DEFAULT NULL,
  `created_at` datetime DEFAULT NULL,
  `updated_at` datetime DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `idx_create_at` (`created_at`)
) ENGINE=InnoDB;
CREATE TABLE `examinations` (
  `id` varchar(256) NOT NULL,
  `name` varchar(256) DEFAULT NULL,
  `start_time` datetime DEFAULT NULL,
  `end_time` datetime DEFAULT NULL,
  `created_at` datetime DEFAULT NULL,
  `updated_at` datetime DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `idx_create_at` (`created_at`)
) ENGINE=InnoDB
参数说明
- cheat_config表: 存储作弊配置 
- cheat_record表:记录考生的作弊信息 
- exam_room_infos表:存储考场信息 
- examinations表:存储考试信息 
具体字段
具体字段可参考代码对应的各个实体:
- com.aliyuncs.aui.entity.CheatConfigEntity 
- com.aliyuncs.aui.entity.CheatRecordEntity 
- com.aliyuncs.aui.entity.RoomInfoEntity 
- com.aliyuncs.aui.entity.ExamEntity 
部署方式
- 方式一(推荐):通过源码部署。 - 本示例主要通过源码构建并部署AppServer。根据源码的说明文档配置并执行,详细信息,请参见AUI Kits远程监考AppServer。 
- 方式二:如果熟悉函数计算,也可以使用Serverless平台快速部署,参见使用事件函数处理云服务产生的事件。 
在首次部署服务器时,请务必编辑代码文件code/src/main/java/com/aliyuncs/aui/common/utils/JwtUtils.java,给属性SECRET随机设置一个字符串。
项目参数配置
- 下载远程监考源码至服务器。 
- 打开源码 - Server\Java\code\src\main\resources目录下的- application.yml文件,配置相关参数。- 参数配置信息 - 说明 - # pop配置。需要配置账号的AccessKey ID和AccessKey Secret,用于调用IM及live相关服务 biz: openapi: access: key: "LTAI****************" secret: "yourAccessKeySecret"- 调用阿里云IM及Live相关服务API时,您需要使用AccessKey完成身份验证。AccessKey包括AccessKey ID和AccessKey Secret。具体如下: - AccessKey ID:用于标识用户。 
- AccessKey Secret:用于验证用户的密钥。AccessKey Secret必须保密。 
 - 更多信息,请参见创建AccessKey。 - # 新IM相关配置 new_im: appId: "********" appKey: "********" appSign: "********"- 直播动消息应用ID,请参见控制台开通与配置中的创建直播互动消息应用获取。 - # 配置推拉流信息 live_stream: push_url: push.*****.vip pull_url: pull.*****.vip push_auth_key: zJl4****** pull_auth_key: mDZs******** app_name: live auth_expires: 604800- # ram及upload用于考生端本地录制功能上传视频的功能,需要使用就配置 ram: access_key_id: LTAI**************** access_key_secret: yourAccessKeySecret upload: role_arn: acs:ram::******* region: cn-shanghai bucket: ***** base_path: /***- 请参阅使用STS临时访问凭证访问OSS或获取STS Token文档创建RAM用户、角色,配置相关参数。 - access_key_id:RAM用户ID。 
- access_key_secret:RAM用户访问密钥。 
- role_arn:RAM角色。 
- region:Bucket所在区域,如 oss-cn-shanghai。 
- bucket:OSS Bucket名。 
- base_path:上传至OSS Bucket的基础路径,如 /record/local/ ,注意和考生客户端配置项保持一致。 
 - # 配置允许跨域的请求域名 http: cors: host: "*"- Web端使用该服务时请正确设置CORS,以允许跨域请求。 
项目打包和运行
打包
- 使用IDEA自带的Maven打包,jar在target目录下。 
- 在 - Server\Java\code路径下使用以下命令执行打包操作。- mvn package -DskipTests
- 将 - target目录下的jar包发送到服务器。- scp xxx.jar root@ip:/root
运行项目
在jar包所在目录下打开终端。
- 终端运行,日志打印到终端。 - java -jar ***.jar
- 后台运行,将日志打印输出到nohup.out文件。 - nohup java -jar ***.jar &
- 查看是否启动成功。 - 访问对应接口,显示如下,说明AppServer启动成功。 