AllJoyn开源技术基础概念解析

摘要: 总线(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 进行发现
设备连接过程示意图:

AllJoyn开源技术基础概念解析_第1张图片

设备之间通信的方式
远程方法调用(同步)
Signal(异步)
Raw session(直接 socket 通信,应用程序可选择基于 TCP 或 UDP )
AllJoyn开源技术基础概念解析_第2张图片

你可能感兴趣的:(p2p,alljoyn,开源技术)