基于容器的软总线应用指南

背景简介

当前用户软件迁向容器化已经是大势所趋。本文档介绍了基于容器部署软总线的使用指导,简化软总线客户端的安装部署,以及方便地与业务软件兼容。

环境准备

硬件设备

设备名称操作系统说明数量
树莓派 4BopenEuler 22.03-LTS-SP4安装 openEuler 操作系统的树莓派2

代码获取

https://gitee.com/openeuler/distributed-codelabs.git

说明

服务安装

以下步骤在设备 A/B 上都需要操作。

  1. 物理机环境安装 openEuler 22.03 LTS SP2 以上版本,环境需要准备好 binder 驱动 binder驱动安装指导

  2. 编译 softbus_client。

    sh
    bash distributed-codelabs/build-repo/demo/dsoftbus/build.sh
  3. 安装 softbus_server。

    sh
    dnf install dsoftbus -y
  4. 启动 softbus_server。

    sh
    /system/bin/start_services.sh all

容器多 client 场景测试

  1. 执行脚本在物理机A打包加载容器镜像。

    sh
    bash distributed-codelabs/build-repo/demo/dsoftbus/docker_img_build.sh
  2. 在物理机A启动容器镜像 softbus_client,并将相关SDK、binder驱动映射到容器中。

    sh
    docker run  -it  --privileged --net=host --name=softbus  -v /dev/binderfs/binder:/dev/binder  -v  /system:/system  -v /usr/lib64:/usr/lib64  -p 5684:5684/udp softbus_client_image  bash
  3. 镜像中写/etc/SI文件,作为该容器中 softclient 的标志,注意需要和组网中其他 client 的不一致,避免冲突。

    sh
    echo 123 > /etc/SI
  4. 容器中启动 softbus_client。

    sh
    ./home/softbus_client
  5. 在本节点上可重复步骤2-3启动不同的 client 容器。

  6. 在物理机B启动 softbus。

    sh
    ./build-repo/demo/dsoftbus/softbus_client
  7. 在设备A中的各个中 client 分别执行命令打开所有连接。

    sh
    openA
  8. 在设备B中 client 查看所有已经打开的 session。

    sh
    conDevices

    回显说明,已经打开了两个 session,id 分别是4、3,此 sessionid 是本机的 softbus_server 分配的,后续发送消息需要用到该 id。

    sh
    conDevices
    12-11 20:18:58.350 2780335 2780335 I A0fffe/SOFTBUS_DEMO: [SOFTBUS_DEMO]::PrintConnectedDevicesInfo: sessionId:4, networkId: 3c95f61941b81c48ecd73fef881262b82fcbc58e9b1f545e2097b0dc6fecea37
    12-11 20:18:58.350 2780335 2780335 I A0fffe/SOFTBUS_DEMO: [SOFTBUS_DEMO]::PrintConnectedDevicesInfo: sessionId:3, networkId: 3c95f61941b81c48ecd73fef881262b82fcbc58e9b1f545e2097b0dc6fecea37
  9. 设备B发送使用“session 4”消息至设备A的 client。

    sh
    send 4 "hello4"
    12-11 20:19:14.975 2780335 2780335 I C015c0/dsoftbus: [TRAN]SendBytes: sessionId=4

    观察设备A中哪个 client 有回显,说明设备B使用 session 4与该 client 通信,同理可以使用 session 3 发送消息至另一个 client。

  10. 设备A容器中 client 发送使用消息至设备B的 client,查看打开的 session id。

    sh
    conDevices
    12-11 20:25:48.995 344047 344047 I A0fffe/SOFTBUS_DEMO: [SOFTBUS_DEMO]::PrintConnectedDevicesInfo: sessionId:1, networkId: e69eab4e2d657264dfbb2006fdfa15524f4a27edeff0baa26d5d2a2b9502f300

    说明使用 session 1 通信。

  11. 发送消息测试,在设备B中接受到该字段说明消息接收成功。

    sh
    send 1 "hello1"
  12. 设备A物理机上 client 发送使用消息至设备B的 client,查看打开的 session id。

    sh
    conDevices
    12-11 20:37:24.823 3512580 3512580 I A0fffe/SOFTBUS_DEMO: [SOFTBUS_DEMO]::PrintConnectedDevicesInfo: sessionId:1, networkId: e69eab4e2d657264dfbb2006fdfa15524f4a27edeff0baa26d5d2a2b9502f300

    说明使用 session 1 通信。

  13. 发送消息测试,在设备B中接受到该字段说明消息接收成功。

    sh
    send 1 "hello1"

session id 说明

在上个章节的测试中,发现两个 client 之间通信使用的 session id 不一样。原因是 session id 是本机 server 分配的,只需要在本机范围内互斥。同样容器与虚机也做了 session name,group name 的隔离,所以本机容器与虚机上 client 的 session id 是一致的。