求教大神,分布式软总线的流程问题

在源码中看分布式流程时:

1. int PublishService(const char *moduleName, const struct PublishInfo *info, const struct IPublishCallback *cb)

这个PublishService的具体作用是什么,应该怎么理解?在一些大神的博文中调用这个方法初始化软总线,我个人理解是主要是类似发布订阅功能中发布某个功能特性标记的topic,初始化软总线的功能只是次要的,在检测软总线未初始化的情况下进行初始化操作。感觉和大神的理解有些偏差,请问这个应该怎么理解?

2.在OpenHarmony中系统在启动时有没有PublishService的动作,还是说需要我们手动去调用下PublishService,才能收到其他设备的UDP 广播消息

3.在流程中有没有发现设备自动连接的流程,还是需要手动调用API去连接,如果时手动连接请问下具体时哪个API?C比较菜,看了半天没找到对应的接口

分布式软总线
2021-07-13 23:47:23
浏览
收藏 0
回答 1
已解决
回答 1
按赞同
/
按时间
liangkz
2

我目前的理解:

1. 平台调用PublishService()时,是向软总线环境(OHOS目前看起来只支持wifi环境,但我的Hi3516开发板用有线网络连接到网络中也可以,华为自用的鸿蒙,应该至少还支持BT)发布本平台支持的能力,一个平台(目前)最多能同时发布三个能力(MAX_MODULE_COUNT = 3),能力列表见CapabilityMap g_capabilityMap的定义。

平台首次PublishService()的时候,会初始化平台端的软总线环境,发布服务成功,将会打开并监测本地的特定端口,随时接收发现端的广播信息,并做出响应,这个响应包括了很多内容,但简单来说就是接收发现端广播/单播的数据,进行处理,向发现端返回数据的处理结果。

 

2. Hi3861平台的轻量系统没有自动调用PublishService()的地方,需要你自己手动调用来PublishService();

Hi3516平台的小型系统, 

[dmslite]                    SYS_SERVICE_INIT(Init)# dtbschedsrv
[dmslite_feature]            SYS_FEATURE_INIT(Init): dmslite

[dmslite_feature] OnInitialize(): InitSoftbusService()-->>softbus
[dmslite_session] InitSoftbusService(): PublishService(dms)

在注册和初始化dmslite feature时,会自动发布dms服务。

 

3. 发现端和被发现端的第一阶段的发现和连接过程,猜测应该是自动完成的,但是目前我没法验证,因为我的手机端还没能正常发现和连接上开发板,估计是因为发现端和被发现端设备需要登录同一个华为账号,而我的开发板,不知道如何登录华为账号~~

猜测账户验证成功后,应该会进入第二阶段的数据交换过程,这一阶段会有:

    .onBytesReceived = OnBytesReceived,
    .onSessionOpened = OnSessionOpened,
    .onSessionClosed = OnSessionClosed

这样的函数来对session和data进行处理,具体如何处理,应该是开发者来定义的。

遗憾的是我也还没能验证是否如此。

 

 

4.我对软总线组件做了一些梳理,但是因为手机没法连接开发板,还没能做出验证,也就不好直接发表总结性的文章。

分享
微博
QQ
微信
回复
2021-07-14 08:42:16
相关问题
分布式总线能否支持全协议
2711浏览 • 1回复 已解决
鸿蒙总线和nearbyService5个问题
822浏览 • 1回复 待解决
鸿蒙系统是如何实现分布式
5824浏览 • 2回复 待解决
请问如何实现异地分布式组网?
744浏览 • 1回复 待解决
关于鸿蒙分布式数据库key疑问
503浏览 • 1回复 待解决
Hi3516进行分布式流转无法获取设备?
984浏览 • 2回复 待解决
鸿蒙操作系统应用开发之总线
2190浏览 • 2回复 已解决
关于Java UI拖拽开发问题
315浏览 • 1回复 待解决