SIMPLE符合RFC2778(A Model for Presence and Instant Messageing) 提出的presence模型,其结构图如下:
各实体功能如下:
Ø Presence Service:接收、存储和分发presence information。PresenceService既可以是一个物理实体上的server,也可以只是presentity和watcher之间的直接通信。 。
Ø Presentity:用于提供presence information给PresenceService。
Ø Watcher:向PresenceService请求获取Presentity的presenceinformation或者自身的watcher information。
Ø Principal:指单个的人、程序或者设备,也可以是人、程序、设备的集合体。对于Presence Service来说,各个Principal是不同的。
Ø Presence User Agent:为Principal提供手段来操作0个或者多个Presentity,Principal操作Presence User Agent改变Presentity的状态。是Principal和Presentity交互的interface。
Ø Watcher User Agent:类似Presence User Agent,Principal通过其来操作0个或多个Watcher,Watcher收到Presentity的新状态之后也通过Watcher User Agent呈现给Principal。
Ø Presence Protocol:定义了Presentity和Presence Service,Watcher和PresenceService之间交换消息的一组标准。
在具体的实现中最常见的是把Presence Service实现为一个Presence Server,PresenceUser Agent和Presentity组合在一起,Watcher和Watcher User Agent组合在一起,由一个终端来同时支持这两种组合体,这样,一个终端就既能订阅别人的也能发布自己的presence information。
一个典型的presence系统需要处理一下一些事件:
Ø 订阅(SUBSCRIBE)和通知(NOTIFY)presenceinformation:
² RFC 3265“SessionInitiation Protocol (SIP): Specific Event Notification”定义了一套事件通知机制,可应用于presence,作为presence订阅和通知的基本模型,这个机制也适用于下面提到的watcher information。
² 通知presence information的时候需要一种规范的SIP消息体格式以便双方能够识别正确的状态。“draft-ietf-simple-presence-data-model-04”抽象了现实世界中的各种服务、人、设备及其各种信息,并映射到“application/pidf+xml”格式的信息。这种“application/pidf+xml”格式用于SIP消息体中来表示Presentity的各种状态,规范为RFC 3863“PresenceInformation Data Format (PIDF)”。它有一种扩展叫rpidf,定义了更加丰富的状态信息,草案名是“draft-ietf-simple-rpid-08”。
² SIMPLE中提出了resourcelist的概念,在presence中通常用于好友列表,这样订阅(SUBSCRIBE)的时候只需要订阅好友列表对应的URI,PresenceService会返回所有好友的状态信息,不必一个一个好友单独订阅,节省了网络带宽资源(这对移动通信比较现实)也易于管理。“draft-ietf-simple-event-list-07”解释了如何订阅和通知好友列表,订阅好友列表需要的几种新格式也在该草案中有说明或者引用。订阅好友列表还涉及到好友列表的产生、维护等,这在下面说明。
² 订阅一个用户的presence information会涉及到黑白名单,当Watcher处于Presentity的白名单中时,Presence Service可以直接授权Watcher,允许其订阅,不需要再通知Presentity对应的Principal,让其来验证。而相反,处于黑名单的时候,Presence Service直接拒绝Watcher的订阅请求。添加删除黑白名单可用presence rules来实现,具体草案为“draft-ietf-simple-presence-rules-03”。它也是用XCAP协议传送消息的,XCAP见下面。
Ø 订阅(SUBSCRIBE)和通知(NOTIFY)watcherinformation(下面简称watcherinfo):
² watcherinfo记录的是订阅一个Presentity的所有Watcher的集合。(注:下文中会出现两种状态,一种是订阅状态,指的是一个Watcher订阅Presentity的presence状态时订阅动作本身的状态,比如“active”表示订阅经授权Presentity的presence状态发生变化时会通知Watcher,“pending”表示收到订阅并被理解,但尚未授权;还有一种就是刚才提到的presence状态,这种状态指的就是一开始说的表征Presentity通信意愿的状态,如“联机”、“忙碌”等)watcherinfo最典型的应用便是通知用户授权,即Presence Service根据本地策略(一般就是黑白名单)不能决定一个订阅是否被授权时会改变Presentity的watcherinfo,从而通知Presentity有人请求订阅其presence状态,让其授权。具体流程见4.3节。
² RFC 3857“AWatcher Information Event Template-Package for the Session Initiation Protocol(SIP)”介绍了watcherinfo事件模板包的作用、用法等。
² 和presence一样,wathcerinfo也需要一种标准化的格式来表示这种信息,RFC 3858“AnExtensible Markup Language (XML) Based Format for Watcher Information”定义了一种叫“application/watcherinfo+xml”的格式来满足这一要求
Ø 发布(PUBLISH)presence状态:
RFC 3903“SessionInitiation Protocol (SIP) Extension for Event State Publication”定义了一种通用的事件状态发布机制,可以应用在presence上发布presence状态信息。
Ø 添加、删除好友以及黑白名单(指的是服务器端存储):
² 这一系列操作都不是用SIP协议来实现的,而是用基于HTTP的XCAP协议来完成这些功能。XCAP用于客户端将跟应用相关的配置数据存储在服务器端,并用HTTP消息结合具体的消息格式来读、写和修改这些数据。草案“draft-ietf-simple-xcap-07”介绍了此协议。
² XCAP可应用于presence,用来读、写、修改服务器端的好友列表和黑白名单,它们都称为资源列表(resource list)。“draft-ietf-simple-xcap-list-usage-05”定义了资源列表的用法,介绍了两种描述列表的格式:“application/rls-services+xml”和“application/resource-lists+xml”。
A想添加B为好友,向B发起一个订阅presence状态的请求。B在线,且接受了A的请求。于是,A成功将B加为好友并且能够观察B的presence状态信息。
[attach]2369[/attach]
欢迎光临 51学通信技术论坛 (http://51xuetongxin.com/bbs/) | Powered by Discuz! X2 |