在移动设备自动化、远程控制、实时数据交互场景中,传统 HTTP 请求 - 响应模式存在频繁轮询、资源消耗高、延迟大等问题,而 WebSocket 协议凭借全双工、长连接、低延迟、轻量级的优势,成为自动化脚本实时通信的最优方案。本文全面讲解WebSocketX接口的核心用法、参数规范、事件机制,覆盖基础通信、自动重连、心跳保活、异常处理等实战场景,助力开发者高效开发高可用自动化脚本。
一、WebSocket 的核心价值
自动化脚本广泛应用于 APP 自动化测试、设备集群管理、实时指令下发、数据回传监控等场景,WebSocket 的适配解决了传统通信的三大痛点:
- 告别轮询,降低资源消耗:无需脚本定时请求服务端,一次握手建立长连接,服务端可主动推送指令、数据,设备 CPU、网络占用大幅降低;
- 毫秒级实时响应:自动化指令、设备状态、日志数据可实时传输,满足自动化任务毫秒级执行要求;
- 全双工双向通信:设备可主动上报状态,服务端可实时下发控制指令,支持多设备协同自动化,适配集群化管理场景。
平台提供的WebSocketX是原生 WebSocket 的增强封装,适配自动化脚本的运行环境,优化了事件绑定、异常捕获、资源释放逻辑。
二、WebSocketX 核心 API 详解
WebSocketX 是冰狐智能辅助封装的 WebSocket 核心对象,包含构造函数、事件绑定、消息发送、连接关闭四大核心方法,所有 API 严格遵循平台官方文档规范,参数定义、回调格式不可随意修改。
1. 构造函数:WebSocketX (uri)
作用:创建 WebSocket 连接实例,初始化与服务端的连接请求,是使用 WebSocket 的第一步。
- 参数 :
- uri(String,必填):WebSocket 服务端地址,格式固定为
ws://IP:端口或wss://IP:端口(加密连接),示例:ws://192.168.1.100:8888; - 注意:必须确保服务端已启动,且设备与服务端网络互通,否则会触发 error 事件。
- uri(String,必填):WebSocket 服务端地址,格式固定为
2. 事件绑定:on (type, callback)
作用:绑定 WebSocket 的生命周期事件,处理连接成功、消息接收、异常、关闭四种核心场景,支持链式调用简化代码。
- 参数 :
- type(String,必填):事件类型,仅支持 4 种固定值:
- open:连接建立成功触发;
- message:接收到服务端消息触发;
- error:连接异常、网络中断、消息发送失败触发;
- close:连接正常关闭或异常断开触发。
- callback(Function,必填):事件处理回调函数,不同事件的回调参数不同,严格遵循官方规范:
- open 回调:
function(ws),ws 为当前 WebSocketX 实例,可直接调用 send 方法发送消息; - message 回调:
function(ws, msg),ws 为实例,msg 为服务端推送的字符串消息; - error 回调:
function(),无参数,用于捕获连接异常、网络故障等错误; - close 回调:
function(),无参数,用于处理连接关闭后的资源释放、重连逻辑。
- open 回调:
- type(String,必填):事件类型,仅支持 4 种固定值:
3. 消息发送:send (msg)
作用:向服务端发送字符串数据,仅支持 String 类型,发送前需确保连接处于 open 状态。
- 参数 :
- msg(String,必填):待发送的消息内容,支持纯文本、JSON 字符串(复杂数据推荐)。
- 注意:若连接未建立或已关闭,调用 send 会触发 error 事件,需在 open 回调后或判断连接状态后调用。
4. 连接关闭:close ()
作用:主动关闭 WebSocket 连接,释放资源,脚本结束、任务完成时必须调用,避免资源泄漏。
- 参数:无,调用后触发 close 事件,执行关闭回调逻辑。
三、基础 Demo
以下 Demo 基于冰狐智能辅助官方示例扩展,包含连接建立、事件监听、消息收发、异常处理、连接关闭全流程,可直接复制到平台脚本编辑器运行,适配所有支持自动化脚本的设备。
1. Demo 功能说明
- 建立与本地 WebSocket 服务端的连接;
- 连接成功后自动发送 "hello" 指令;
- 接收服务端返回的消息并打印日志;
- 捕获连接异常、关闭事件,输出状态提示;
- 支持手动关闭连接,释放资源。
2. 完整源码
javascript
// 冰狐智能辅助WebSocketX基础通信Demo
// 全局变量:存储WebSocketX实例,方便各函数调用
var wsInstance = null;
// 脚本主入口:冰狐平台自动化脚本默认执行main函数
function main() {
console.log("===== 冰狐智能辅助WebSocket脚本启动 =====");
// 1. 初始化WebSocketX:替换为你的服务端IP+端口
var serverUri = "ws://localhost:8888";
wsInstance = new WebSocketX(serverUri);
// 2. 链式绑定所有事件(官方推荐写法)
wsInstance
.on("open", onOpenSuccess) // 连接成功事件
.on("message", onReceiveMsg) // 接收消息事件
.on("error", onConnectError) // 异常事件
.on("close", onConnectClose); // 关闭事件
// 脚本持续运行(避免自动退出)
while (true) {
sleep(1000); // 每秒休眠,降低资源占用
}
}
// 3. 连接成功回调:官方规范参数(ws)
function onOpenSuccess(ws) {
console.log("【状态】WebSocket连接建立成功");
try {
// 连接成功后发送初始化消息
ws.send("hello");
console.log("【发送】消息:hello");
} catch (e) {
console.error("【错误】发送消息失败:" + e.message);
}
}
// 4. 接收服务端消息回调:官方规范参数(ws, msg)
function onReceiveMsg(ws, msg) {
console.log("【接收】服务端消息:" + msg);
// 业务逻辑:根据消息内容执行自动化操作
handleAutoTask(msg);
}
// 5. 连接异常回调:无参数
function onConnectError() {
console.error("【异常】WebSocket连接失败/网络中断");
// 可选:触发自动重连逻辑(进阶Demo实现)
}
// 6. 连接关闭回调:无参数
function onConnectClose() {
console.log("【状态】WebSocket连接已关闭");
}
// 7. 业务处理函数:根据服务端指令执行自动化
function handleAutoTask(msg) {
switch (msg) {
case "start_task":
console.log("【执行】开始自动化任务");
// 调用平台自动化API:如启动APP、点击控件等
// launchApp("com.example.app");
break;
case "stop_task":
console.log("【执行】停止自动化任务");
// 关闭连接,退出脚本
if (wsInstance) {
wsInstance.close();
}
exit();
break;
default:
console.log("【提示】未知指令:" + msg);
}
}
// 脚本退出时关闭连接,释放资源
exit = function () {
if (wsInstance) {
wsInstance.close();
console.log("【退出】资源释放完成");
}
};
3. Demo 运行说明
- 服务端准备 :启动本地 WebSocket 服务(如 Node.js、Python WebSocket 服务器),监听
8888端口; - 脚本部署:将源码复制到冰狐智能辅助平台脚本编辑器,保存后分配给设备运行;
- 日志查看:设备运行后,在平台日志面板查看连接状态、消息收发、指令执行记录;
- 通信测试 :服务端向设备发送
start_task/stop_task,验证自动化指令执行。
四、进阶 Demo:高可用 WebSocket 脚本
基础 Demo 仅实现核心通信,实际自动化场景中,网络波动、服务端重启、设备断网 会导致连接断开,影响任务执行。因此进阶 Demo 增加自动重连、心跳保活、状态判断三大高可用特性,适配工业级自动化需求。
1. 进阶功能说明
- 连接断开后自动重试,最多重试 5 次;
- 定时发送心跳包,维持长连接,避免服务端主动断开;
- 判断连接状态,仅在连接成功时发送消息;
- 支持 JSON 格式消息,适配复杂指令传输。
2. 完整源码
javascript
// 冰狐智能辅助WebSocket高可用进阶Demo
var ws = null;
var isConnected = false; // 连接状态标记
var reconnectCount = 0; // 重连次数
var maxReconnect = 5; // 最大重连次数
var heartTimer = null; // 心跳定时器
var serverUri = "ws://192.168.1.100:8888"; // 服务端地址
// 主函数
function main() {
console.log("===== 高可用WebSocket脚本启动 =====");
initWebSocket();
// 脚本持续运行
while (true) {
sleep(1000);
}
}
// 初始化WebSocket
function initWebSocket() {
ws = new WebSocketX(serverUri);
bindEvents();
}
// 绑定所有事件
function bindEvents() {
ws.on("open", function (wsObj) {
console.log("【连接】建立成功");
isConnected = true;
reconnectCount = 0; // 重置重连次数
startHeartBeat(); // 启动心跳
wsObj.send(JSON.stringify({ type: "device_online", msg: "设备已上线" }));
}).on("message", function (wsObj, msg) {
console.log("【接收】原始消息:" + msg);
// 解析JSON消息
try {
var data = JSON.parse(msg);
handleJsonData(data);
} catch (e) {
console.log("【错误】JSON解析失败:" + msg);
}
}).on("error", function () {
console.error("【异常】连接出错");
isConnected = false;
}).on("close", function () {
console.log("【关闭】连接断开");
isConnected = false;
stopHeartBeat(); // 停止心跳
autoReconnect(); // 自动重连
});
}
// 自动重连逻辑
function autoReconnect() {
if (reconnectCount >= maxReconnect) {
console.error("【重连】超过最大次数,停止重连");
return;
}
reconnectCount++;
console.log("【重连】第" + reconnectCount + "次尝试,3秒后重连");
sleep(3000);
initWebSocket();
}
// 启动心跳:每10秒发送一次心跳包
function startHeartBeat() {
if (heartTimer) clearInterval(heartTimer);
heartTimer = setInterval(function () {
if (isConnected) {
ws.send(JSON.stringify({ type: "heart_beat", msg: "心跳" }));
console.log("【心跳】发送成功");
}
}, 10000);
}
// 停止心跳
function stopHeartBeat() {
if (heartTimer) {
clearInterval(heartTimer);
heartTimer = null;
}
}
// 处理JSON格式指令
function handleJsonData(data) {
switch (data.type) {
case "control":
console.log("【执行】控制指令:" + data.content);
// 执行自动化操作:点击、滑动、输入等
// click("id:btn_submit");
break;
case "heart_beat":
console.log("【心跳】服务端响应成功");
break;
default:
console.log("【提示】未知消息类型");
}
}
// 退出释放资源
exit = function () {
isConnected = false;
stopHeartBeat();
if (ws) ws.close();
console.log("【退出】脚本结束,资源释放完成");
};
五、冰狐智能辅助 WebSocket 开发常见问题与解决方案
1. 连接失败(触发 error 事件)
- 原因:服务端未启动、IP / 端口错误、设备与服务端网络不通、防火墙拦截端口;
- 解决方案:核对服务端地址、关闭设备防火墙、确保局域网互通、测试服务端连通性。
2. 消息发送失败
- 原因:连接未建立(open 未触发)、发送非 String 类型数据、连接已关闭;
- 解决方案:在 open 回调后发送消息、将数据转为字符串(JSON.stringify)、判断 isConnected 状态。
3. 连接自动断开
- 原因:服务端超时无心跳断开、网络波动、脚本资源泄漏;
- 解决方案:增加心跳保活机制、优化脚本休眠逻辑、避免死循环占用资源。
4. 脚本自动退出
- 原因:main 函数执行完毕无循环、未捕获异常导致崩溃;
- 解决方案:添加
while(true){sleep(1000)}维持脚本运行、增加 try-catch 捕获异常。
六、WebSocket 在自动化场景的实战应用
- 远程实时控制:服务端通过 WebSocket 下发点击、滑动、启动 APP 等指令,设备实时执行,实现远程自动化操作;
- 设备状态监控:设备定时上报 CPU 占用、运行日志、任务进度,服务端实时展示,无需轮询;
- 多设备协同:主设备通过 WebSocket 同步指令给从设备,实现集群自动化,适用于 APP 批量测试;
- 日志实时回传:自动化任务执行日志、报错信息实时推送至服务端,快速定位问题,提升调试效率。
七、总结
WebSocket 是冰狐智能辅助平台实现实时自动化、远程控制、集群管理的核心通信技术。本文从基础 API 讲解、基础 Demo、高可用进阶 Demo、问题排查、实战应用全维度覆盖了 WebSocket 在自动化脚本中的使用方法,源码可直接适配平台运行,满足从小型自动化任务到大型设备集群管理的各类需求。