AllJoyn核心概念

xiaozhu12371237 2016-05-30 01:20:38


AllJoyn应用程序和AllJoyn网络进行交互时,首先实例化AllJoyn Bus Attachment对象,并使用该对象连接到AllJoyn Router.
AllJoyn应用程序可以通过两种机制宣告其服务:Announcements 和 Well-Known Name。根据传输方式的不同,AllJoyn框架将使用不同的机制来确保该应用程序可以被其他AllJoyn应用程序发现。例如对于基于IP的传输,使用mDNS,以及组播和广播UDP分组。
对于advertising来说,推荐的机制是Announcements。它为应用程序提供了一种通用的方法去广播该程序关注的一组元数据,如制造商,型号,支持的接口,图形图标,以及更多的其他信息。
Well-Known Name是一种更原始的机制,应用程序通过它声明和发现彼此。Announcements使用这种机制。通常推荐应用程序优先使用Announcements机制,只有在特殊情况下才采用Well-Known Name这种更底层的机制。
使用这两种方式,发现搜索进程都会返回AllJoyn应用程序列表,这些AllJoyn应用程序通过唯一名称来区分识别。在未来的通信中,应用程序需要利用它来创建会话。

Session and Port

AllJoyn框架负责创建AllJoyn应用程序之间的连接服务。通常情况下,一个提供服务的应用程序通过About Announcements广播它的服务。远端的另外一个AllJoyn应用程序,发现这个应用程序(以及它的UniqueName)后,可以创建一个会话,一个名叫JoinSession的进程。提供服务的AllJoyn应用程序可以接受,也可以拒绝这个JoinSession请求。



AllJoyn应用彼此之间通过BusObject抽象进行通信。这种抽象很好地契合了面向对象的编程思想:对象由定义良好的接口创建。通常情况下,这是提供服务的应用程序创建一个BusObject。远端的应用程序可以方便地远程打开BusObject并调用它的方法,类似于远程过程调用。

每个BusObject实现一组接口。每个接口明确定义了一组BusMethods,BusProperties和BusSignals的。 BusMethods允许远程实体调用它的方法。 BusProperties可以获取和设置。 BusSignals是从应用程序提供的服务发出的信号。

一个BusObject连接在指定的总线路径。这允许更大的灵活性,基于不同的目的,相同的对象可以连接到不同的的总线路径。例如,如果一个应用程序正在实现一个炉灶服务时,StoveBurner BusObject可以连接到多个总线通道,如'/范围/左'和'/范围/右“多总线通道,以允许对灶具燃烧器进行单独控制。

远程应用程序通过创建ProxyBusObject对象来获得对BusObject的访问。

综上所述,提供服务的应用程序通过实现BusObject对象来对外公开访问其服务的方法。远程应用程序创建与此应用程序的会话,并创建一个ProxyBusObject对象连接到其BusObject的特定路径上。然后,它可以调用BusMethods,访问BusProperties,并接收BusSignals。

会话可以是点对点的,也可以是多点连接(multi-point)。点对点的会话是一对一的连接,而多点连接(multi-point)会话则可以让一组设备或者应用程序在同一会话中互相通信。


会话创建在特定的端口上。不同的端口允许各种点对点和多点连接拓扑结构的存在。下图中左侧的A和B都有点对点的会话连接到S上的端口1. 而右侧的A,B,C和S都连接在S的端口2上的多点会话。



Sessionless Signal 是AllJoyn核心API提供的一种无须创建会话就可以接收信号的抽象机制。在内部它采用Well-Known Name宣告新信号的存在。远程实体自动创建瞬时会话,接收信号数据,然后关闭会话。
Introspection内置于AllJoyn框架。 利用AllJoyn API可以很容易地反过来发现远程AllJoyn应用的对象路径和对象,它全部接口包括所有方法,参数,属性,和信号。通过introspection,我们可以了解远程设备,并且在无需有关该设备的先验信息的情况下和它进行沟通。

AllJoyn应用程序的接口,方法,信号,以及属性都通过XML来组织和定义。introspection的XML概要可在AllSeen联盟网站的如下链接中找到:
https://allseenalliance.org/schemas/introspect.xsd
应用程序通常使用Events and Actions来形容它的事件和行动。通过添加简单的元数据描述符到信号和方法中,其他的AllJoyn应用程序可以很容易地发现:该应用程序会发出什么事件,什么行动应用程序可以接收。这允许其它应用程序可以在不同设备间动态地将事件和动作链接在一起,从而创建更复杂的交互作用。

AllJoyn在应用程序层面使用安全性; 在设备层面上不存在是否信任的问题。每个接口都可以选择是否进行安全性处理。如果需要的话,当两个应用程序之间有方法被调用或接收信号时,需要进行首先进行身份认证。AllJoyn支持多种身份认证机制:PIN码,PSK或ECDSA(椭圆曲线数字签名算法)。一旦通过身份验证,这两种设备之间的所有消息都使用AES-128进行加密。
AllJoyn应用通过Bus Attachment和AllJoyn框架进行交互。应用程序通过About Announcement通告它的服务,其中列出了它的元数据,包括它支持的接口。返回的UniqueName用来唯一标示该应用程序。

当远程的应用发现一个AllJoyn应用后,它可以创建一个连接在指定端口的会话。一对一或者多方会话都被支持,AllJoyn应用可以接收也可以拒绝来自远方的连接请求。

在会话创建前,应用程序可以创建任意数量的bus objects并将它们放置在特定对象路径。每个bus objects可以实现一组接口,而接口通过一组方法,属性和信号来定义。

在创建会话后,远程应用程序通常与应用程序创建一个本地ProxyBusObject和BusObject进行交互,交互的方式包括:调用方法,获取和设置属性,接收信号等等。



在许多情况下,客户端的发现,会话建立和代理对象管理都遵循一个跨应用的简单通用模式。Standard Core library中的Observerclass提供的API可以很方便地处理这种场景。Observer class 会自动为客户端应用程序完成About announcement解析,会话管理和代理对象创建。


...全文
543 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

949

社区成员

发帖
与我相关
我的任务
社区描述
为开发者提供高通丰富的解决方案及全面技术下载内容。本版以AI人工智能、WoS移动笔记本、XR、IoT 物联网、Auto 汽车、生成式AI等核心板块组成,为开发者提供一个便捷及高效的学习交流平台。
人工智能物联网机器学习 企业社区 北京·东城区
社区管理员
  • Qualcomm开发
  • csdnsqst0050
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧