回答
Hamibot 官方标准 API 中目前未直接封装独立的 WebSocket 模块。如果你需要在脚本中实现 WebSocket 通信,可以通过 Rhino 引擎的 Java 互操作能力调用运行环境内置的 okhttp3 库来实现。以下是兼容 Hamibot 运行环境的基础实现方案:
// 文档地址 https://docs.hamibot.com/
var OkHttpClient = Packages.okhttp3.OkHttpClient;
var Request = Packages.okhttp3.Request;
var WebSocketListener = Packages.okhttp3.WebSocketListener;
var client = new OkHttpClient();
var request = new Request.Builder().url('ws://your-server-address').build();
var listener = new WebSocketListener({
onOpen: function (webSocket, response) {
log('WebSocket 已连接');
webSocket.send('Hello from Hamibot');
},
onMessage: function (webSocket, text) {
log('收到消息: ' + text);
},
onClosing: function (webSocket, code, reason) {
log('连接关闭中: ' + reason);
webSocket.close(1000, null);
},
onFailure: function (webSocket, t, response) {
log('连接失败: ' + t.getMessage());
}
});
var ws = client.newWebSocket(request, listener);
// 保持脚本运行以维持长连接
setInterval(function () {}, 1000);
技术特性与最佳实践建议:
- 引擎兼容性:Hamibot 使用 Rhino 1.7.15 引擎,示例代码已严格避免箭头函数与默认参数,采用标准函数表达式确保稳定执行。
- 线程安全:WebSocket 的回调函数默认在后台网络线程执行。如果你需要在回调中操作 UI 或调用部分必须在主线程运行的 Hamibot API,请使用
ui.run(function () { ... })或threads模块进行线程切换。 - 连接保活与资源释放:Android 系统对后台进程有严格的回收策略。建议在脚本退出时主动关闭连接,避免内存泄漏或端口占用:
events.on('exit', function () { if (ws) { ws.close(1000, 'Script exited'); } client.dispatcher().executorService().shutdown(); }); - 替代方案:如果目标服务器支持 HTTP,且你对实时性要求不高,建议优先使用 Hamibot 内置的
http模块配合短轮询或长轮询。内置模块经过深度适配,在脚本执行稳定性、错误重试和电量控制上表现更优。
如果你需要针对特定业务场景(如心跳机制、断线重连、数据加密)的完整封装代码,可以提供具体需求,我会为你输出可直接复用的脚本结构。
ℹ️ 内容由 AI 生成,可能不准确,请注意核实