2008-7-21 22:50 Testoner
转贴:About Yukon S40

名词解释
 J2ME – Java 2 Micro Edition。Yukon S40项目采用的架构是J2ME架构,J2ME是一种高
度优化的Java运行环境,应用于大量的消费类电子设备
,如Cellular Phones(蜂窝电话)、Screen Phones(可视电话)、Digital Set-top Boxes(数字机顶盒)、Car Navigation Systems(汽车导向系统)等,同时也广泛被移动通
信设备所采用,如移动电话、双向寻呼机、智能卡、个人电
脑记事本(Personal Organizer)和掌上电脑(Palmtop)等。
J2ME技术将Java语言的与平台无关的特性移植到小
型电子设备上,允许移动无线设备之间共享应用程序。
 TLS - 安全传输层协议 Transport Layer Security Protocol。安全传输层协议用于在两个通信应用程
序之间提供保密性和数据完整性。该协议由两层组成:TL
S 记录协议(TLS Record)和 TLS 握手协议(TLS Handshake)。较低的层为 TLS 记录协议,位于某个可靠的传输协议(例如 TCP)上面。
 XMPP – Jabber服务器所采用的通信协议。它是基于XML的
协议,非常灵活,并且可扩展。后文Yukon工作原理中
有详细描述。
 Jabber – 一个开源的,安全的即时通信服务器,它采用分散型的即时
通信服务网络,用户所发送的消息不是由像QQ,MSN这
样的大型公司来管理的,而是有很多分散的Jabber服
务器,用户甚至能够搭建属于自己的服务器。Jabber
有很多种类,我们项目测试时所使用的是eJabberd
Server。
 JID – Jabber ID,Jabber标识符。在Jabber里,有许多不
同的实体需要进行相互通信。这些实体可以表现为传输器、
群组聊天室、或者是单一的Jabber用户。Jabbe
r标识符(Jabber Identifiers)是用来在内部和外部表达用户身
份或路由信息的,一般用Jabber ID表示。JID的格式与Email的格式相似,它由一
套有序的元素组成,可以标识为[node @] domain[/resource]的形式。如melo
dy@jabber.org/home就是一个合法的J
abber ID。
 vCard – 电子名片。利用vCard规范,我们可以公开交换个人数
据交换 (Personal Data Interchange PDI) 信息,代替传统的纸质商业名片。vCard规范可以作为
各种应用或系统之间的交换格式,它的格式是规范化的,所
以与传送的方法及平台无关。例如用户可以使用电子邮件转
发vCard,或者把vCard存储到手机通讯录当中。
例如,在我们平时使用的Microsoft Outlook当中,每一个联系人其实就是一个vCar
d,里面包含联系人的很多信息。
vCard数据格式行是:类型 [;参数]:值。vCard内容必须以BEGIN:VC
ARD开头,以END:VCARD结尾。一个简单的vC
ard例子如下:
BEGIN:VCARD
VERSION:2.1
N:Yang;Mowei
FN:Yang Mowei
NICKNAME:Melody
TEL;WORK;VOICE:010-0000000
TEL;CELL;VOICE:13600000000
ADR;WORK:;;;北京;100094;
EMAIL;PREF;INTERNET:liumei
soft.com
X-WAB-GENDER:1
REV:20080441158h
END:VC
 RMS – Record Management System,记录管理系统。Yukon项目要求在手机
上存储用户的好友信息,所以需要一个数据库来存储。而因
为手机存储的特殊性,不可能支持PC上使用的大型数据库
来存储信息。所以我们采用RMS,它是一个小型的数据库
管理系统,它以一种简单的、类似表格的形式组织信息,并
存储起来形成持久化存储,以供应用程序在重新启动后还能
够继续使用。
RMS提供了Records(记录)和Records Stores(记录仓储)两个概念。
记录仓储(Records Stores)类似于一般关系数据库系统中的表(TAB
LE),它代表了一组记录的集合。在相同MIDlet Suite中,每个仓储都拥有自己独一无二的名字,大小
不能超过32个Unicode字符,同一个Suite下
的MIDlet都可以共享这些记录仓储。
记录是记录仓储的组成元素。记录仓储中含有很多条记录,
就如同记录表格是由一行行组成的一样。每条记录代表了一
条数据信息。一条记录(Record)由一个整型的Re
cordID与一个代表数据的byte[]数组两个子元
素组成。RecordID是每条记录的唯一标志符,利用
这个标志符可以用于从记录仓储中找到对应的一条记录。请
注意,由于产生记录号RecordID使用的是一种简单
的单增算法。当一条数据记录被分配的时候,它的记录号也
就唯一分配了。并且该条记录被删除后,RecordID
也不会被使用。所以,仓储中相邻的记录并不一定会有连续
的RecordID。
MIDP Suite所使用的RMS空间图可由下图所示:

2 基本工作原理
2.1 概述
Yukon S40项目所开发的软件,是一个基于Jabber的即时
通信软件的客户端。它所实现的功能包括增加好友,与好友
聊天,存储好友信息,存储消息历史记录等,与现有的MS
N等即时通信工具的功能相似。
Yukon S40所连接的消息服务器是Jabber服务器。Jab
ber是一个开源的、安全的即时通信服务器,它采用分散
型的即时通信服务网络,用户所发送的消息不是由像QQ,
MSN这样的大型公司来管理的,而是有很多分散的Jab
ber服务器,用户甚至能够搭建属于自己的服务器。Ja
bber时消息(IM)系统和现有IM服务相比较有以下
几个主要特点:
 XML为基础
 分布式网络
 开放的协议和内核代码
 模块化的、可扩展的系统架构
2.2 XMPP协议的消息格式
Jabber服务器是采用XMPP协议来实现的。XMP
P是一种基于XML的协议,它继承了在XML的灵活性和
可扩展性。通过XMPP协议,消息可以通过XML文件在
客户端与服务器、服务器与服务器之间传输。由于XMPP
是以XML为基础的,因此Jabber消息不仅可以是简
单的文本交流,而且可以携带复杂的数据和各种格式的文件
。Jabber的这种功能大大扩展了即时通信的应用范围

XMPP协议包括三个顶层XML元素:<message
/>,<presence/>,<iq/>(info/
query)。每一个元素通过属性和命名空间包含大量的
数据,这些属性和命名空间都是Jabber的组成部分。
而所有<message/>,<presence/>,
以及<iq/>元素都被放在这些 Jabber会话的XML流的上下文中。下面介绍一下J
abber协议中的三个核心元素。
(1) <message/>元素
此元素包含两个Jabber用户间互相发送消息内容,或
者两个Jabber IDs之间的其它消息。无论目标用户的状态如何,消息由
JSM(Jabber session management)来负责存储或转发。如果目标用户
在线,则JSM立即提交消息,否则JSM就把消息存储在
服务器上。
以下是一个<message/>元素结构举例:
<message to='milo@Jabber.org/contac
t' type='chat'>
<body>你好,在忙吗</body>
</message>
其中message的属性包括to(消息接收方),fr
om(消息发送方),type(消息类型)等。其中ty
pe包括下表中的四种取值:
属性名称 描述
[default] 表示默认。默认的情况下,客户端在没有设置属性时,将消
息类型定为普通消息
[chat] 表示一对一在线聊天
[error] 表示消息是一条错误消息。错误消息的具体内容会在<me
ssage/>的子元素<error/>中描述
[groupchat] 表示该消息是来自一个聊天室的群聊

<message/>还可以包含一个或者多个子元素,下
表列出了<message/>的子元素:
子元素名称 描述
<subject> 表示消息的主题,类似于email消息的主题
<thread> 为了方便跟踪某次会话中的消息,一个用户产生的
<body> 消息体的内容
<error> 当发生错误的时候,包含了错误的详细信息

(2) <presence/>元素
此元素用来描述用户的状态,任何通过Jabber ID确认的实体可以与另一个实体进行在线状态信息的通信
,这种通信大多以订阅在线状态信息的方式进行。
以下是一个<presence/>元素结构举例:
<presence from='lily@Jabber.com/cont
act' to=' [email]yaoman@Jabber.com[/email]/contact'
>
<show>away</show>
<status>online</status>
</presence>
presence协议主要有两项重要的任务,第一,更新
用户的当前状态,我们可以通过presence包任意改
变自己的存在状态;第二,管理订阅用户当前状态的行为,
通过presence包,我们一方面可以订阅别的用户的
当前状态,另一方面可以授权或者取消别的用户访问我们当
前状态的权限。不同类型的presence包有不同的作
用,下表列出了presence的type属性的不同取
值。
Type的取值 所属的协议类型 说明
available 状态更新 用户可以接受消息
unavailable 状态更新 用户不可以接受消息
subscribe 当前状态订阅管理 请求订阅一个用户的当前状态
unsubscribe 当前状态订阅管理 请求取消一个用户的当前状态的订阅
subscribed 当前状态订阅管理 发送者授权对方订阅自己的当前状态
unsubscribed 当前状态订阅管理 所订阅的发送者的当前状态的权限被取消
error 标准的Jabber错误 由于presence问题引起的Jabber标准错误

<presence/>还包含了两个子元素<show/
>与<status/>。下表列出了<show/>可取
的值。这个值也可以在客户端应用程序中用图形来表示。<
status/>包含了一个对<show/>元素的文本
描述。
值 描述
normal 表示可以联系该用户,如果没有<show/>,这是默认

chat 与“normal”相似,此外还暗示该用户可以聊天
dnd dnd代表“Do not disturb”,表示该用户是可联系的,但是不想被打

away 用户临时从客户端离开
xa 用户离开客户端的时间比较长

(3) <iq/>
iq代表Info/Query,通过“请求/响应”机制
,在实体之间传送XML文件,这和HTTP中的“GET
”和“POST”方法类似。IQ主要的用处是取得或设置
公共的用户信息,比如名字,电子邮件,地址等等。iq元
素包含如下四种状态:
状态 描述
get 请求信息
set 设置信息
result 如果“get”或者“set”成功,显示结果
error 如果“get”或者“set”不成功,描述错误


iq元素可以用于不同的目的,它们之间通过不同的命名空
问来加以区分。在Jabber协议中有许多命名空问,比
较常用的命名空问有“jabber:iq:regist
er”,“jabbet:iq:auth”,“jabb
er:iq:roster”。
以下是一个iq请求包的简单示例:
<iq type='get' to='directory@manning.com'
from='me@manning.com'>
<query xmlns="my:query:namespace"
>
<name-first>Bob</name-firs
t>
<name-last/>
<email/>
</query>
</iq>
以下是一个iq响应包的简单示例:
<iq type='result' to='me@manning.com' from='directory@manning.co
m'>
<query xmlns='my:query:namespace'
>
<name-first>Bob</name-firs
t>
<name-last>Smith</name-las
t>
<email>[email]bob.smith@manning.c[/email]
om</email>
</query>
<query xmlns='my:query:namespace'
>
<name-first>Bob</name-firs
t>
<name-last>Doe</name-last>
<email>[email]bob.doe@manning.com[/email]
</email>
</query>
</iq>


2.3 Jabber系统的通信方式
Jabber在设计上很大程度沿袭了Internet上
最成功的消息系统——Email。Jabber可以在一
个使用共同协议的服务器组成的分布式网络上提供消息通信
,连接这个网络的客户端,可以与同一个服务器或其他In
ternet上的服务器上的用户收发消息。Jabber
的消息转发是实时的,因为Jabber服务器(包括所有
Jabber服务器上的用户)知道一个用户什么时候在线
。Jabber通过两个附加的功能提供了IM的标准性,
首先是一个允许消息系统间协同作业的开放协议,其次是建
立在XML上的强大基础。它不仅可以使两个用户之间进行
通信,还可以使两个应用软件之间进行通信。下面将进一步
阐述Jabber的特色。
(1) Client/Server客户端/服务器端
Jabber使用的是客户端-服务器端的系统架构,而不
是其它一些即时信息系统使用的客户端-客户端的系统架构
。所有从一个客户端发给另一个客户端的Jabber消息
和数据都必须通过服务端。任何一个客户端都可以通过商议
与另一个客户端自由地建立一个直接的连接,但这些连接只
用于特殊服务的应用。有一些实例被鼓励建立这种连接,比
如文件传输,但这些连接必须先通过一个客户端-服务端形
式进行协商,才能建立。下图描述了Jabber的这种体
系结构。


(2) Distributed Network分布式网络
Jabber的网络体系是模仿Email系统的。每一个
用户都有自己的本地服务器,并从该服务器上接收信息,消
息和在线信息在这些服务器之间传输。可以添加任意数目的
Jabber服务器,这些服务器接受客户端的连接,并与
其它Jabber服务器进行通信。每一个Jabber服
务器都独立于其他Jabber服务器,并且拥有其自身的
用户列表。通过Internet,任何一个Jabber
服务器都可以与其他Jabber服务器进行通话。每一个
用户都与一个特殊服务器(提供注册服务的服务提供商或行
政管理企业)相对应,Jabber地址和Email地址
的形式是一样的,如[email]melody@jabber.org[/email]

如下图所示,图中包含两个Jabber服务器:Jabb
er.org和Jabber.com。每一个服务器都有
自己的一些用户。当一个用户与同属一个服务器的其他用户
通信时,消息直接通过本服务器转发。用户也可以与其他域
内的用户通信,一个用户把消息发送到自己所属的服务器上
之后,服务器会根据消息当中包含的目标用户的域名,来判
断应该发送到哪一个服务器,接着由一个服务器发送到另一
个服务器,再发送到目标客户端。

(3) Modular Server模块化的服务器端
Jabber服务器遵循两个主要法则:监听客户端连接,
并自接与客户端应用程序通信,与其他Jabber服务器
通信。
Jabber开源服务器被设计成模块化,由各个不同的代
码包构成,这些代码包分别处理类似用户认证、数据存储(
离线消息,花名册,用户信息等)等等。另外,服务器可以
通过附加服务来进行扩展,如完整的安全策略,允许服务器
组件的连接或客户端选择,通向其他消息系统的网关。
一个模块化的例子就是通过把Jabber XML翻译成其他协议的独立“transport”(传
输器),可以实现Jabber消息系统与非Jabber
消息系统之间进行消息和在线信息的交流。这些传输器并不
是服务器内核。相反,它们是很容易添加到内核的程序,为
终端用户提供更强大的功能服务。下图描述了一个Jabb
er系统通过一个transport实现与其他即时通信
系统的兼容。


(4) Basic Message Flow基本消息流程
Jabber会话由两个平行的XML流组成,一个从客户
端到服务器端,另一个从服务器端到客户端。当一个Jab
ber客户端连接上一个Jabber服务器时,这个客户
端将发起一个客户端-服务器的XML流,同时作为响应,
服务器也将发起一个服务器-客户端的XML流。所有<m
essage/>,<presence/>,以及<iq
/>元素都被放在这些XML流的上下文中。
下图是Jabber系统消息流的示意图:


3 项目环境
以下为Yukon S40项目开发和测试所采用的环境配置与工具。
 软件架构:J2ME
 开发环境:JDK1.5,SDK_S40_5.0
 开发工具:Eclipse 3.2
 手机平台:Nokia Series 40平台
 通信协议:XMPP协议
 消息服务器:eJabberd Server
[url=http://www.facebook.com/photo.php?pid=30021976&id=1346778790&op=1&view=all&subj=20688988478&aid=-1&oid=20688988478][img]http://photos-h.ak.facebook.com/photos-ak-sf2p/v309/234/87/1346778790/n1346778790_30021975_2707.jpg[/img][/url]
[url=http://www.facebook.com/photo.php?pid=30021976&id=1346778790&op=1&view=all&subj=20688988478&aid=-1&oid=20688988478][img=554,383]http://photos-a.ak.facebook.com/photos-ak-sf2p/v309/234/87/1346778790/n1346778790_30021976_3469.jpg[/img][/url]

2008-7-22 07:26 jayliyunpeng
沙发!相当专业的介绍 感谢分享

2008-7-22 13:07 1tlove
好东西。。不过图我没看懂。。翻翻字典。

2008-8-2 13:33 jiaxiaojianjjw
字典上也没有啊

页: [1]
查看完整版本: 转贴:About Yukon S40


Powered by Discuz! Archiver 5.5.0  © 2001-2006 Comsenz Inc.