Harmony-websocket(一)

websocket(确认过眼神,就是朋友了)

定义:

是一种网络通信协议,用于在客户端和服务器之间建立持久、双向的实时通信连接,适用于实时交互的应用场景。

特点:

  • 双向通信:WebSocket允许服务器和客户端之间进行双向通信;
  • 持久连接:一旦连接成功,WebSocket会保持连接状态,直到一方主动断开连接(相对于Http请求,减少了频繁建立和关闭连接的开销);
  • 基于TCP:数据传输的可靠性;
  • 低延迟:数据可以在连接上可以快速传输,无需每次都建立新的连接。

使用:

  1. 创建WebSocket对象:createWebSocket()方法
  2. 和服务器建立连接:connect()方法
  3. 检测是否连接成功:on('open')事件的回调
  4. 连接成功后,接收服务器发送的信息:on('message')事件的回调,发信息给服务器send()
  5. 不用时,断开连接:close(),注意断开后,相关的websocket对象也会被销毁
typescript 复制代码
import { webSocket } from '@kit.NetworkKit';
import { BusinessError } from '@kit.BasicServicesKit';


let defaultIpAddress = "ws://";

// 第一步:创建websocket通讯的对象
let ws = webSocket.createWebSocket();

// 第二步:连接服务器
ws.connect(defaultIpAddress, (err: BusinessError, value: boolean) => {
  if (!err) {
    console.log("Connected successfully");
  } else {
    console.log("Connection failed. Err:" + JSON.stringify(err));
  }
});
// 第三步检测是否与服务器连接成功:on('open')事件的回调
ws.on('open', (err: BusinessError, value: Object) => {
  console.log("on open, status:" + JSON.stringify(value));
  // 第四步:收到on('open')事件时,就可以通过send()方法与服务器进行通信
  ws.send("Hello, server!", (err: BusinessError, value: boolean) => {
    if (!err) {
      console.log("Message send successfully");
    } else {
      console.log("Failed to send the message. Err:" + JSON.stringify(err));
    }
  });
});

// 第四步:接收服务器发送的信息
ws.on('message', (err: BusinessError, value: string) => {
  console.log("on message, message:" + value);
  
});

// 第五步:不用时,断开
ws.on('close', (err: BusinessError, value: webSocket.CloseResult) => {
  console.log("on close, code is " + value.code + ", reason is " + value.reason);
});

// 错误事件处理
ws.on('error', (err: BusinessError) => {
  console.log("on error, error:" + JSON.stringify(err));
});

心跳检测机制

概念:

在客户端和服务端建立WebSocket连接之后,每间隔30秒客户端会发送Ping帧给服务器,服务器收到后会立即回复Pong帧

bug以及处理方法

  1. 切换到后台的时候,WebSocket会断开连接??? 答:无长时任务的应用退到后台,大概15s会主动断开WebSocket连接或者系统强制断开TCP连接(有长时任务大概会60s左右断开),故我们需要应用切换到前台时,重新创建连接。可以在EntryAbility文件的onForeground()中重新连接。 第二个方法:采用Push Kit。应用在后台的时候,将接收并缓存该时段的所有信息,达到websocket在后台保活的效果(从后台功耗管控策略角度考虑,不建议)
  2. websocket连接上就断开了??? 答:鸿蒙的底层有心跳检测机制,但是如果连接成功后,30s内不进行send(),那么底层会强制断开长连接;执行send()后就会一直保持长连接了。

后续有问题会及时补充上嘟

相关推荐
OH_TPC18 小时前
HarmonyOS APP开发---“动效君“UI动效素材库App,需要用到这个库
ui·华为·harmonyos·鸿蒙
贾伟康1 天前
HarmonyOS 3DGS 滤镜切换实战:效果创建、参数管理与资源释放
harmonyos·arkts·鸿蒙开发·技术实践·空间化体验
HarmonyOS_SDK1 天前
【HarmonyOS API 26】分布式数字身份DID:系统级可信身份体系
harmonyos
贾伟康1 天前
HarmonyOS GSNode 场景控制实战:位置、缩放、可见性与状态同步
harmonyos·arkts·鸿蒙开发·技术实践·空间化体验
redtank20001 天前
纯血鸿蒙本地音乐播放器开发实战:我爱听歌架构解析
harmonyos
贾伟康1 天前
HarmonyOS API 26 分块 3DGS 实战:相机驱动、瓦片回调与并发去重
性能优化·harmonyos·arkts·3dgs·spatial recon kit
万物智能信息科技1 天前
指纹识别传感器驱动开发—【万物智能之开源鸿蒙OpenHarmony系统实战开发系列教程】
驱动开发·华为·开源·harmonyos·鸿蒙
贾伟康2 天前
【共创稿事节】HarmonyOS 7.0 AOT编译优化:从接入到生产验证
harmonyos·arkts·路由·navigation·navdestination
2601_949480062 天前
开源鸿蒙平台 CMP 三方库「shadcn」适配全流程
华为·开源·harmonyos
Liaiyang662 天前
空圈容错视角-HarmonyOS 7 架构体检:从被动容错到主动免疫的真伪验证与生态反推
操作系统·harmonyos·架构设计·ai-agent·端云协同·鸿蒙7·空圈容错