您的位置:首页 > 其它

AllJoyn开源技术基础概念解析

2016-01-27 10:16 330 查看
摘要: 总线(Bus) 实现P2P通信的基础 AllJoyn 的底层协议类似于D-Bus,相当于是跨设备分布式的 D-Bus 总线附件(Bus Attachment) 每一个连接到总线上的Alljoyn应用程序被称为总线附件,可用C++或Java编写 每个总线附件 ...

总线(Bus)

实现P2P通信的基础

AllJoyn 的底层协议类似于D-Bus,相当于是跨设备分布式的 D-Bus
总线附件(Bus Attachment)

每一个连接到总线上的Alljoyn应用程序被称为总线附件,可用C++或Java编写

每个总线附件有独一的名称(unique name),当每次连接到总线时自动分配

每个总线附件可以有一个易读的名称(well-known name),用于标识服务,例如“org.alljoyn.bus.addressbook”
总线接口(Bus Interfaces)

类似于Java中的接口,定义了方法、信号处理函数和属性

所有总线方法(Bus Methods)可使用简单或复杂的数据类型(数组、结构等)作为参数和返回值
总线对象(Bus Objects)

用于实现总线接口,每个总线对象实现一个或多个总线接口

处理远程方法调用(Remote Method Calls)和发出信号(signals)、消息(messages)

总线对象通过总线附件注册到总线上

每个总线对象有一个类似于文件路径的路径名,例如/org/AllJoyn/Games/chess,用于远程方法调用
代理总线对象(Proxy Bus Object)

一旦总线附件之间建立连接,应用程序创建一个代理总线对象,实现远程方法调用(Remote Method Calls)并准备好从总线上接收信号(signals)

远程方法调用是同步的,信号则是异步的且可以一对多(广播)或一对一
service 和 client

P2P 应用中提供服务的一方称为 service,使用服务的一方称为 client

一个应用程序可以同时是 service 和 client(例如chat)
session

在宣告服务后,service 需创建一个或多个 session,client 发现服务后加入 session

每个 session 有一个 session port,类似于 socket 通信中的 port

session 的两种情形:

point-to-point session:两个 peer 之间交互

multipoint session:多个 peer 加入同一个 session,组成一个 group

AllJoyn daemon——实现P2P通信的核心

daemon通过进程间通信(IPC)与应用程序通信,应用程序只与 daemon打交道

daemon提供一个抽象层处理所有的网络传输、消息路由、命名空间管理等

整个AllJoyn系统相当于一个虚拟总线,连接多个AllJoyn daemons和总线附件

daemon是用 C++编写的 native程序,运行在不同操作系统上的 daemons可实现互联

在应用程序启动之前必须先启动daemon
AllJoyn daemon 在 Android 上的三种实现形式

第一种:Android app(AllJoyn.apk)

只支持 WiFi/TCP 传输

无需 root 权限

第二种:纯C++编写的可执行程序,在 adb shell 下运行(alljoyn-daemon)

若使用 WiFi 传输无需 root 权限

若使用 Bluetooth 传输需 root 权限,且蓝牙协议栈限定用 bluez

可在 init.rc 中自动加载

第三种:与应用程序捆绑在一起(bundle),不需要单独启动daemon

适用于发布基于AllJoyn开发的应用程序
设备发现和建立连接的过程

注册(Register): 连接在总线上的对象为自身进行注册

宣告(Advertise): 连接在总线上的对象通过IP组播(multicast)宣告自身的存在
发现(Discover): 发现其他对象的存在
在使用蓝牙时借助蓝牙本身的 SDP 进行发现

设备连接过程示意图:



设备之间通信的方式

远程方法调用(同步)

Signal(异步)

Raw session(直接 socket 通信,应用程序可选择基于 TCP 或 UDP )


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: