前言
今天来写一个云控被控端的基础模型。
在这个模型里,我们模拟从服务器获取任务,执行该任务。在没有新任务的时候,让被控端保持轮询状态,一旦有新的任务,就进入执行状态。
长连接与短连接
云控有两种连接方式,一种是基于http的短连接,一种是基于websocket的长连接。
在HTTP/1.0中默认使用短连接。也就是说,客户端和服务器每进行一次HTTP操作,就建立一次连接,任务结束就中断连接。当客户端浏览器访问的某个HTML或其他类型的Web页中包含有其他的Web资源(如JavaScript文件、图像文件、CSS文件等),每遇到这样一个Web资源,浏览器就会重新建立一个HTTP会话。
短连接对于服务器来说管理较为简单,存在的连接都是有用的连接,不需要额外的控制手段。但如果客户请求频繁,将在连接建立和关闭操作上浪费较多时间和带宽。
WebSocket是HTML5新增的协议,它的目的是在浏览器和服务器之间建立一个不受限的双向通信的通道,比如说,服务器可以在任意时刻发送消息给浏览器。
长连接可以省去较多的连接建立和关闭的操作,减少浪费,节约时间。对于频繁请求资源的客户端适合使用长连接。在长连接的应用场景下,client端一般不会主动关闭连接。
综上,长短两种连接方式,各有优缺点。在云控开发的过程中,可以根据业务需求,选择适合的连接方式。下面的测试模型,我们使用短连接的方式来实现。
实现代码
任务信息配置文件,保存为“taskTest.json”文件。
上传到码云的公有仓库里。
其中module_url要修改为仓库的脚本地址。
{
"task_id": "24504",
"module_name": "某音_随机浏览热门视频",
"module_url": "./awemeViewHotVideo.js",
"module_group_id": null,
"module_param": {
"module_id": "54",
"group_name": "某音",
"module_url": ""
}
}
子脚本代码,保存为“awemeViewHotVideo.js”文件。
上传到码云的公有仓库里。
/*
* @Description:
* @Version: 1.0
* @Autor: 飞云
* @LastEditTime: 2020-12-08 19:56:50
*/
awemeFace();
setExceptionCallback(function (msg) {
logd(" 异常停止消息: " + msg)
});
setStopCallback(function () {
logd("我是停止回调")
});
function awemeFace() {
home();
let packageName = 'com.ss.android.ugc.aweme';
launch(packageName);
let pages = random(3, 5); //指定需浏览的视频随机数量
logi('需浏览 ' + pages + '个视频');
for (let i = 0; i < pages; i++) {
let activity = getRunningActivity();
switch (activity) {
case 'com.ss.android.ugc.aweme.main.MainActivity':
let times = random(5000, 10000); //单个视频浏览时长
logd('等待 ' + times + '毫秒');
sleep(times);
// 设定坐标,注意避开悬浮窗
let x = device.getScreenWidth() * 7 / 10;
let y = device.getScreenHeight() * 8 / 10;
let x1 = device.getScreenWidth() * 7 / 10;
let y1 = device.getScreenHeight() * 1.5 / 10;
// 随机滑屏
let jumpNum = random(1, 5);
for (let j = 0; j < jumpNum; j++) {
if (j != jumpNum - 1) {
logd('跳过第 ' + (j + 1) + '屏');
}
// 滑动屏幕,注意避开悬浮窗
if (rndSwipe(x, y, x1, y1, 100, 200, 200)) {
sleep(3000);
}
}
logi('浏览第 ' + (i + 1) + '个视频');
break;
default:
break;
}
}
}
被控端“main.js”代码:
function main() {
//如果自动化服务正常
if (!autoServiceStart(3)) {
loge("自动化服务启动失败,无法执行脚本")
exit();
} else {
logd("开始执行脚本...")
}
};
main();
while (true) {
//这里要替换为仓库地址
let url = './taskTest.json'
var x = http.httpGetDefault(url, 10 * 1000);
if (x.length > 0) {
let taskInfo = JSON.parse(x);
if (taskInfo) {
if (taskInfo.module_url) {
x = http.httpGetDefault(taskInfo.module_url, 10 * 1000);
if (x.length > 0) {
if (execScript(2, x)) {
logi('>>>执行脚本成功');
} else {
loge('执行脚本失败');
}
}
}
sleep(1000);
} else {
toast('暂无任务,等待30秒');
sleep(30000);
}
} else {
toast('暂无任务,等待30秒');
sleep(30000);
}
}
被控端启动后,请求该设备的任务信息。如果请求到了,就按照任务配置,执行脚本。
如果没有请求到,就等待30秒,轮询请求。
如果你有java、node.js、python、php等后端语言开发能力,就可以将示例代码中的json,开发成api接口来供被控端调用了。
云控后端接口开发,可以学习本站的PHP框架开发WEB API接口入门教程
EasyClick免费云控
全动云是淘美科技旗下2021年最新的免费云控脚本管理系统。提供设备分组、设备管理、脚本分组、脚本管理、任务管理、素材管理等强大功能。支持用户上传自定义EasyClick脚本。
全动云大数据智能营销管理系统
相关链接
EasyClick脚本开发教程(1)IntelliJ IDEA Ultimate的安装方法
EasyClick脚本开发教程(2)安装开发工具并创建项目
EasyClick脚本开发教程(3)连接设备与屏幕映射
EasyClick实现某音直播间刷屏喊话,循环发送随机话术
EasyClick实现某音发送指定语音,发送好友私信,引流脚本必备技术
EasyClick交流群
QQ群号:737066890
飞云脚本圈: 586333520
Auto.js学习交流③群:286635606
Auto.js学习交流②群:712194666(满员)
IOS免越狱自动化测试群:691997586
2. 盗版,破解有损他人权益和违法作为,请各位会员支持正版。
3. 本站部分资源来源于用户上传和网络搜集,如有侵权请提供版权证明并联系站长删除。
4.如未特别申明,本站的技术性文章均为原创,未经授权,禁止转载/搬运等侵权行为。
5.全站所有付费服务均为虚拟商品,购买后自动发货。售出后概不接受任何理由的退、换。注册即为接受此条款。
6.如果站内内容侵犯了您的权益,请联系站长删除。
飞云脚本 » EasyClick脚本开发教程(22)云控基础模型