基于容器的软总线应用指南
背景简介
当前用户软件迁向容器化已经是大势所趋。本文档介绍了基于容器部署软总线的使用指导,简化软总线客户端的安装部署,以及方便地与业务软件兼容。
环境准备
硬件设备:
设备名称 | 操作系统 | 说明 | 数量 |
---|---|---|---|
树莓派 4B | openEuler 22.03-LTS-SP4 | 安装 openEuler 操作系统的树莓派 | 2 |
代码获取
https://gitee.com/openeuler/distributed-codelabs.git
说明
服务安装
以下步骤在设备 A/B 上都需要操作。
物理机环境安装 openEuler 22.03 LTS SP2 以上版本,环境需要准备好 binder 驱动 binder驱动安装指导。
编译 softbus_client。
bash distributed-codelabs/build-repo/demo/dsoftbus/build.sh
安装 softbus_server。
dnf install dsoftbus -y
启动 softbus_server。
/system/bin/start_services.sh all
容器多 client 场景测试
执行脚本在物理机A打包加载容器镜像。
bash distributed-codelabs/build-repo/demo/dsoftbus/docker_img_build.sh
在物理机A启动容器镜像 softbus_client,并将相关SDK、binder驱动映射到容器中。
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
镜像中写
/etc/SI
文件,作为该容器中 softclient 的标志,注意需要和组网中其他 client 的不一致,避免冲突。echo 123 > /etc/SI
容器中启动 softbus_client。
./home/softbus_client
在本节点上可重复步骤2-3启动不同的 client 容器。
在物理机B启动 softbus。
./build-repo/demo/dsoftbus/softbus_client
在设备A中的各个中 client 分别执行命令打开所有连接。
openA
在设备B中 client 查看所有已经打开的 session。
conDevices
回显说明,已经打开了两个 session,id 分别是4、3,此 sessionid 是本机的 softbus_server 分配的,后续发送消息需要用到该 id。
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
设备B发送使用“session 4”消息至设备A的 client。
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。
设备A容器中 client 发送使用消息至设备B的 client,查看打开的 session id。
conDevices 12-11 20:25:48.995 344047 344047 I A0fffe/SOFTBUS_DEMO: [SOFTBUS_DEMO]::PrintConnectedDevicesInfo: sessionId:1, networkId: e69eab4e2d657264dfbb2006fdfa15524f4a27edeff0baa26d5d2a2b9502f300
说明使用 session 1 通信。
发送消息测试,在设备B中接受到该字段说明消息接收成功。
send 1 "hello1"
设备A物理机上 client 发送使用消息至设备B的 client,查看打开的 session id。
conDevices 12-11 20:37:24.823 3512580 3512580 I A0fffe/SOFTBUS_DEMO: [SOFTBUS_DEMO]::PrintConnectedDevicesInfo: sessionId:1, networkId: e69eab4e2d657264dfbb2006fdfa15524f4a27edeff0baa26d5d2a2b9502f300
说明使用 session 1 通信。
发送消息测试,在设备B中接受到该字段说明消息接收成功。
send 1 "hello1"
session id 说明
在上个章节的测试中,发现两个 client 之间通信使用的 session id 不一样。原因是 session id 是本机 server 分配的,只需要在本机范围内互斥。同样容器与虚机也做了 session name,group name 的隔离,所以本机容器与虚机上 client 的 session id 是一致的。