在自动化脚本中如何使用websocket?

在移动设备自动化、远程控制、实时数据交互场景中,传统 HTTP 请求 - 响应模式存在频繁轮询、资源消耗高、延迟大等问题,而 WebSocket 协议凭借全双工、长连接、低延迟、轻量级的优势,成为自动化脚本实时通信的最优方案。本文全面讲解WebSocketX接口的核心用法、参数规范、事件机制,覆盖基础通信、自动重连、心跳保活、异常处理等实战场景,助力开发者高效开发高可用自动化脚本。

一、WebSocket 的核心价值

自动化脚本广泛应用于 APP 自动化测试、设备集群管理、实时指令下发、数据回传监控等场景,WebSocket 的适配解决了传统通信的三大痛点:

  1. 告别轮询,降低资源消耗:无需脚本定时请求服务端,一次握手建立长连接,服务端可主动推送指令、数据,设备 CPU、网络占用大幅降低;
  2. 毫秒级实时响应:自动化指令、设备状态、日志数据可实时传输,满足自动化任务毫秒级执行要求;
  3. 全双工双向通信:设备可主动上报状态,服务端可实时下发控制指令,支持多设备协同自动化,适配集群化管理场景。

平台提供的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 事件。

2. 事件绑定:on (type, callback)

作用:绑定 WebSocket 的生命周期事件,处理连接成功、消息接收、异常、关闭四种核心场景,支持链式调用简化代码。

  • 参数
    • type(String,必填):事件类型,仅支持 4 种固定值:
      • open:连接建立成功触发;
      • message:接收到服务端消息触发;
      • error:连接异常、网络中断、消息发送失败触发;
      • close:连接正常关闭或异常断开触发。
    • callback(Function,必填):事件处理回调函数,不同事件的回调参数不同,严格遵循官方规范:
      1. open 回调:function(ws),ws 为当前 WebSocketX 实例,可直接调用 send 方法发送消息;
      2. message 回调:function(ws, msg),ws 为实例,msg 为服务端推送的字符串消息;
      3. error 回调:function(),无参数,用于捕获连接异常、网络故障等错误;
      4. close 回调:function(),无参数,用于处理连接关闭后的资源释放、重连逻辑。

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 运行说明

  1. 服务端准备 :启动本地 WebSocket 服务(如 Node.js、Python WebSocket 服务器),监听8888端口;
  2. 脚本部署:将源码复制到冰狐智能辅助平台脚本编辑器,保存后分配给设备运行;
  3. 日志查看:设备运行后,在平台日志面板查看连接状态、消息收发、指令执行记录;
  4. 通信测试 :服务端向设备发送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 在自动化场景的实战应用

  1. 远程实时控制:服务端通过 WebSocket 下发点击、滑动、启动 APP 等指令,设备实时执行,实现远程自动化操作;
  2. 设备状态监控:设备定时上报 CPU 占用、运行日志、任务进度,服务端实时展示,无需轮询;
  3. 多设备协同:主设备通过 WebSocket 同步指令给从设备,实现集群自动化,适用于 APP 批量测试;
  4. 日志实时回传:自动化任务执行日志、报错信息实时推送至服务端,快速定位问题,提升调试效率。

七、总结

WebSocket 是冰狐智能辅助平台实现实时自动化、远程控制、集群管理的核心通信技术。本文从基础 API 讲解、基础 Demo、高可用进阶 Demo、问题排查、实战应用全维度覆盖了 WebSocket 在自动化脚本中的使用方法,源码可直接适配平台运行,满足从小型自动化任务到大型设备集群管理的各类需求。

相关推荐
ai_coder_ai1 天前
在自动化脚本中如何实现录音功能?
autojs·录音·自动化脚本·冰狐智能辅助·easyclick
Walter先生1 天前
Python 行情数据清洗实战:Z-Score、MAD 与分位数过滤的异常值检测
后端·websocket·架构·实时行情数据源·美股行情api
小挪号底迪滴1 天前
浅析 AI 实时语音流转译背后的技术架构:从 WebSocket 到流式 LLM
人工智能·websocket·架构
TickDB1 天前
MCP、WebSocket 与 Agentic Wallet:AI 自主交易的三把钥匙,同时转动了
人工智能·python·websocket
垦利不2 天前
websocket通信
网络·websocket·网络协议
li星野2 天前
FastAPI 项目加入 WebSocket 支持
python·websocket·fastapi
(Charon)2 天前
【C++/Qt】Qt 实现 WebSocket 测试工具:连接、消息收发与通信日志
c++·qt·websocket
Mr -老鬼2 天前
EasyClick 安卓CLI全栈专家能力手册
android·自动化·ai编程·easyclick·易点云测
911hzh2 天前
Flutter 音视频通话集成实战:WebSocket 做信令,WebRTC 传音视频,附详细事件时序图
websocket·flutter·音视频