AllJoyn开源技术基础概念解析
2016-04-07 10:17
288 查看
AllJoyn开源技术基础概念解析
总线(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 )
转载地址:http://www.fcuhome.com/article-1439-1.html
总线(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 )
转载地址:http://www.fcuhome.com/article-1439-1.html
相关文章推荐
- 树莓派使用蓝牙4.0连接设备并发送指令
- 阮一峰的博客
- ViewStub用法
- RHEL7系统修复rm -rf /boot /etc/fstab
- [国嵌攻略][183][账号管理子系统设计]
- C# 之 user32函数库
- TIPS:.gitignore忽略多层文件夹用**
- margin重叠的问题
- SQL server 数据库之ADO操作技术1
- CSS3动画和animae.css动画库的使用
- 创建Filter类
- 自动化运维平台 | 新炬网络
- 大文件与小文件下载
- git 根据tag创建分支
- C++使用迭代器遍历数组
- Android开发——项目代码编写规范
- [POJ 1691]Painting A Board[DFS][排序]
- 在linux中使用sar调优系统性能
- centos 常用命令
- x264代码剖析笔记