WebSocket

## WebSocket ```js // 新建一个WebSocket // 指定web socket的事件回调在当前线程(好处是没有多线程问题要处理,坏处是不能阻塞当前线程,包括死循环) // 不加后面的参数则回调在IO线程 let ws = web.newWebSocket("wss://echo.websocket.org", { eventThread: 'this' }); console.show(); // 监听他的各种事件 ws.on("open", (res, ws) => { log("WebSocket已连接"); }).on("failure", (err, res, ws) => { log("WebSocket连接失败"); console.error(err); }).on("closing", (code, reason, ws) => { log("WebSocket关闭中"); }).on("text", (text, ws) => { console.info("收到文本消息: ", text); }).on("binary", (bytes, ws) => { console.info("收到二进制消息:"); console.info("hex: ", bytes.hex()); console.info("base64: ", bytes.base64()); console.info("md5: ", bytes.md5()); console.info("size: ", bytes.size()); console.info("bytes: ", bytes.toByteArray()); }).on("closed", (code, reason, ws) => { log("WebSocket已关闭: code = %d, reason = %s", code, reason); }); // 发送文本消息 log("发送消息: Hello, WebSocket!"); ws.send("Hello, WebSocket!"); setTimeout(() => { // 两秒后发送二进制消息 log("发送二进制消息: 5piO5aSp5L2g6IO96ICDMTAw5YiG44CC"); ws.send(web.ByteString.decodeBase64("5piO5aSp5L2g6IO96ICDMTAw5YiG44CC")); }, 2000); setTimeout(() => { // 8秒后断开WebSocket log("断开WebSocket"); // 1000表示正常关闭 ws.close(1000, null); }, 8000); setTimeout(() => { log("退出程序"); }, 12000) ``` ## UI下卡死的问题 > 非官方资料 websocket在ui下运行,会直接卡死,出现黑屏。 这种情况下,必须设置一个子线程,来运行websocket [多线程 - Threads](doc:nvOP1CCz) --- [koa搭建websocket与autojs通信](https://www.jianshu.com/p/ab89dce41835) ![image.png](https://easydoc-1255322048.image.myqcloud.com//cover/2i9chfiw4hk00000.png/2/w/1080/h/1080)