AllJoyn架构
AllJoyn总线上的总线对象通过代理(Proxies)访问。代理是一个远程对象的本地表示,通过总线访问。代理是一种常见的术语,不是特定于AllJoyn系统,但是你会经常遇到ProxyBusObject一词,在AllJoyn框架中指出proxy的具体对象,它是一个位于远程对象的本地代理总线。
ProxyBusObject 是底层(low-level)AllJoyn代码的一部分。它使能一个代理对象的基本对象。
通常,一个RMI系统的目标是提供一个代理,实现了一个接口,看起来像是一个我们可以调用的远程对象。
在AllJoyn框架,客户端和服务软件,往往通过特定的编程语言绑定,提供实际的用户级代理对象。这个用户级代理对象使用AllJoyn代理总线对象(AllJoyn proxy bus object)的能力去实现他本地/远程透明的目标
一个AllJoyn总线上的连接作为服务提供接口的实现,通过接口名称来描述。接口的实现在服务中组成接口对象的一个树。客户端希望通过代理对象(proxy objects)使用服务,使用底层的AllJoyn代理总线对象通过逻辑总线对象去安排总线方法、总线信号和总线所有权等相关信息的交付。
为了完成总线寻址,对总线连接的名称必须是唯一的。AllJoyn为每个总线附属(bus attachment)提供一个唯一的临时总线名称。然而,这个唯一的名字是每次服务服务连接到总线自动产生的,因此不适合作为一个持久的服务标识符。必须有一个一致的和持久的方式让服务附属到总线上。 这些持久的名字被称作 well-known names.
正如一台主机系统在互联网上的域名不会随时间变化(e.g., 37iot.com),调用一个AllJoyn总线上的功能部件通过它well-known的总线名称。正如接口名称似乎是反向的域名,总线名字有相同的格式。请注意,这里会产生一些混淆,因为接口名称和well-known总线名称为了方便起见时常选择相同的字符串。记住他们代表不同的目的,接口名称标识客户端和服务之间的合同,由总线对象实现,驻守在总线附属(bus attachment)中;well-known名称标识服务和客户端通过一致的方式连接到那个附属(attachment)。
使用一个well-known名字,一个应用(通过总线连接)必须向总线Router使用这个名字。如果well-known名字没有被另外一个应用使用,同意独家使用这个well-known名字。这就是为什么在任何时间,well-known名字在总线上保证代表唯一的地址。
通常,一个well-known名字意味着约定,相关的总线连接实现了一组总线对象,因此可用服务的一些概念。由于总线名称提供了一个在分布式总线上唯一的地址,他们在总线中必须是唯一的。例如,可以使用总线名称,org.alljoyn.sample.chat,这将表明一个同名的总线连接可以实现聊天服务。由于用了这个名字,人们可以推断,它在一个总线对象的/org/alljoyn/sample/chat目录实现了相应的org.alljoyn.sample.chat接口
这个问题是为了“聊天”,人们会期望看到AllJoyn总线上的另一个类似的组件表明它支持聊天服务。由于总线名称必须唯一地标识一个总线连接,这就需要某种形式的后缀来保证唯一性。这可能需要一个用户名或一个唯一的编号的形式。