HarmonyOS 鸿蒙Next中实现多设备同屏操作,非统一网络环境下,非同一账号,依靠后端服务器socket应该如何实现

HarmonyOS 鸿蒙Next中实现多设备同屏操作,非统一网络环境下,非同一账号,依靠后端服务器socket应该如何实现 【问题描述】:多台鸿蒙终端实现画面、数据、标注实时同步。操作人员在一台终端上查看设备视频或参数,并进行标记、圈注、说明,其他终端可即时看到相同内容与标注,实现“同屏协作、远程指导”

【问题现象】:多台鸿蒙终端实现画面、数据、标注实时同步。操作人员在一台终端上查看设备视频或参数,并进行标记、圈注、说明,其他终端可即时看到相同内容与标注,实现“同屏协作、远程指导”,即使设备在非统一网络也可以实现同步操作,后端写好有socket,APP端应该如何实现?

6 回复

通过腾讯会议等开会软件来共享吧,

更多关于HarmonyOS 鸿蒙Next中实现多设备同屏操作,非统一网络环境下,非同一账号,依靠后端服务器socket应该如何实现的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


不是共享屏幕,而是A在软件内做操作,剩下的设备也可以在软件内做出相同的操作,

你可以向那个华为官方反映一下,说不定你这个提议刚好非常的nice,他们会采用,

使用腾讯会议app共享屏幕即可。

在HarmonyOS Next中实现跨网络、跨账号的多设备同屏,可通过后端服务器建立WebSocket或Socket连接。每台设备独立连接服务器,服务器作为中转节点同步操作指令。设备间无需直接通信,由服务器转发数据。需在设备端实现Socket客户端,服务器端管理连接并转发消息。

这是一个典型的跨网络、跨账号的实时协同场景,核心在于通过中心化的服务器进行消息中转和状态同步。在HarmonyOS Next中,你可以按照以下架构和步骤实现:

1. 核心架构:客户端-服务器-客户端 (C-S-C) 所有鸿蒙终端(客户端)不与彼此直接连接,而是分别与你的后端Socket服务器建立独立的长连接。服务器作为唯一的中枢,负责转发所有协同操作指令和数据。

2. HarmonyOS Next 客户端实现关键步骤:

  • 建立Socket连接: 使用@ohos.net.socket模块创建TCP Socket,连接到你的后端服务器地址和端口。需要处理网络状态变化(如从WiFi切换到蜂窝网络)下的重连机制。

  • 定义应用层通信协议: 你需要与后端约定一套简洁的应用层协议,用于封装不同类型的协同事件。例如,一个操作指令的JSON结构可能包括:

    {
        "type": "annotation", // 事件类型:annotation(标注), viewport(视口变换), chat(聊天)
        "senderDeviceId": "device_001", // 发送者设备标识(非账号ID)
        "sessionId": "session_abc", // 协同会话ID
        "payload": { // 具体负载
            "tool": "pen",
            "color": "#FF0000",
            "points": [[x1,y1], [x2,y2], ...]
        },
        "timestamp": 1234567890
    }
    

    将协议数据包通过Socket连接发送给服务器。

  • 数据同步与操作转发:

    • 作为操作发起端: 当用户进行标注、缩放、平移等操作时,客户端立即将操作信息按协议序列化,通过Socket发送给服务器。
    • 作为操作接收端: 客户端持续监听Socket接收到的数据。一旦收到服务器转发的操作指令,立即解析协议,并根据typepayload在本地UI上重现该操作(例如,在同样的画布位置绘制同样的笔画)。关键在于,所有客户端都执行相同的操作指令,以达到最终状态一致。
  • 处理非统一网络与异构设备:

    • 服务器负责处理NAT穿透、不同内网设备间的通信。客户端只需确保能连接到公网服务器即可。
    • 设备间屏幕尺寸、分辨率可能不同。建议在协议中使用相对坐标(如相对于画布宽高的百分比),而非绝对像素坐标。或者在会话开始时,交换基本的画布或视口信息以进行适配。
  • 状态同步与冲突处理(简易策略):

    • 操作序化: 服务器为每个会话维护一个全局递增的操作序列号,附带在转发消息中。客户端按顺序应用操作,确保最终一致性。
    • “最后操作优先”或“操作转换”: 对于简单的标注,可以采用最后操作直接覆盖。对于更复杂的协作(如文本编辑),可能需要实现OT(Operational Transformation)或CRDT(无冲突复制数据类型)算法,但这会显著增加复杂度。
  • 媒体数据(视频/参数)同步: 画面视频流通常不通过业务Socket传输。建议:

    • 视频流通过专门的RTC(实时通信)服务或拉流地址单独传输。
    • Socket协同服务器只同步与视频播放相关的控制指令,如{"type": "playback", "payload": {"action": "play", "timestamp": 12345}},所有客户端根据指令同步播放、暂停、跳转。

3. 技术栈与模块参考:

  • 网络连接: @ohos.net.socket (TCP), 考虑使用@ohos.net.http进行初始会话创建等非实时请求。
  • 数据序列化: @ohos.util 中的 JSON 相关方法。
  • 并发与异步: 使用Worker线程处理Socket的持续读写,避免阻塞UI线程。
  • UI渲染: 使用Canvas (<Canvas>组件) 来绘制接收到的实时标注和图形。

总结: HarmonyOS Next客户端App的角色是:1) 与中心服务器保持可靠Socket连接;2) 将所有本地协同操作序列化为消息并发送;3) 接收服务器转发的他人操作消息,并实时在本地渲染。实现的重点在于可靠通信、高效协议设计、操作的无状态重现,而非设备间的直接发现或连接。服务器端负责会话管理、消息路由和状态仲裁。

回到顶部