//-------------------------------------------
XMPP:体系架构:
Client,Server,Gateway.三个角色。
1,会话管理层,:负责客户端会话认证。在线状态,用户联系表等。
2,数据存储器(XDB):连接数据库系统,保持用户信息。通信日志等。
3,连接器管理器:管理与客户端之间的链接。
4,服务器连接器:管理xmpp服务器之间的连接。
5,传输器:建立xmpp服务器与非xmpp服务器通信。
//--------------------------------------------
工作原理:
所有从一个Client到另一个client的jabber消息和数据都要通过xmpp server.
1,client连接到server。
2,server利用本地目录系统的证书对其认证。
3,client指定目标地址,让server告知目标状态。
4,server查找,连接并进行相互认证。
5,client间进行交互。
//--------------------------------------------
XMPP:统一的JID地址:
格式:JID=[node"@"]domain["/"resource]
eg:lee@maiziedu.com/res
domain:服务器域名。
node:用户名。
resource:属于用户的位置或设备。
一个用户可以同时以多种资源与同一个XMPP服务器连接。
//--------------------------------------------
XMPP;xml消息格式定义:
xmpp:xml包括三个元素:
示例:
<stream>
<presence>
<status/>
</presence>
<message>
<body/>
</message>
<iq>
<bind/>
</iq>
</stream>
persence:确定当前用户的状态,在线,忙,下线。
message:封装用户之间的消息。
iq:信息/请求:是一个请求-响应机制。管理xmpp服务器上两个用户的交换。允许他们通过相应的xml格式的查询和相应。
iq:的属性包括:type:包括:
GET:获取当前域值。SET:设置或者替换get查询的值。
Result:说明成功的相应了先前的查询。
Error:查询和响应中出现的错误。
//--------------------------------------------
XMPP:协议簇:XMPP,SASL,TLS,TCP.
XMPP采用SASL作为身份认证的协议。
SASL包含的信息:
<服务名>:XMPP
<初始化序列>
<交换序列>
<安全层协商>
顺序:[TCP]-->[TLS]-->[SASL]-->[XMPP].
//----------------------------------------------
Mina服务器对外提供的一些接口:
IoServer(负责底层通讯接入)。这个接口在一个线程上负责套接字的建立。拥有自己的Selector,监听是否有连接被建立。
IoAcceptor(相当于网络应用程序中的服务器端)
IoConnector(相当于客户端);
IoserviceListener(监听器);
IoProcessor(线程相关的接口);
Iosession(当前客户端到服务器端的一个连接实例)
IoSessionConfig(话的配置信息,主要包括:读缓冲区大小,会话数据吞吐量,计算吞吐量的时间间隔,指定会话段的空闲时间,写请求操作超时时间)
IoFilter:过滤器主要用于悬接通讯层接口与业务层接口。这个接口定义一组拦截器,这些拦截器可以包括日志输出,黑名单过滤,数据的编码与解码等功能,其中数据的encode与decode是最为重要的也是你在使用Mina时最主要关注的地方。
IoHandler(业务处理逻辑),这个接口负责编写业务逻辑,也就是接收,发送数据的地方。
Mina框架的应用分为三个模块:创建连接(Ioserver)---->添加消息过滤器(IoFilter)--->添加业务处理(IoHandler)。
mina官网: http://mina.apache.org/
//----------------------------------------------
OpenFire:
java语言编写,基于XMPP协议,开源的实时协作的服务器,具有跨平台的能力。
基于可扩展的WEB控制管理界面。基于插件的开发框架,高可扩展性。
稳定支持上万用户的并发操作。
Openfire与客户端采用的是C/S架构,一个服务器要负责为连接在其上的客户端提供服务。
基于总线的设计方式,各个Module都是单例,使用者通过总线获得Module相关实例,所有的Module大致分为以下几类:
1,提供服务功能,
2,提供处理功能。
3,提供配置功能,
4,提供监听功能,
5,提供网络功能。
//------------------------------------------------
Smack是一个用于和XMPP服务器通信的类库,由此可以实现即时通讯聊天。
1,支持XEP-198规范,记流的管理。
2,原生支持Android。
3,Smack4.1可替代aSmack库。
改进:
1,XMPPConnection变更为接口。
2,重新实现了SASL的认证。
3.添加了IQ请求句柄。
4,XMPPConnection.addPacketListener方法被抛弃了。
5,StringUtils工具类。
6,消息监听器的变化。
7,连接配置ConnectionConfiguration类使用了Builder设计模式。
简单易用,并且有十分强大的API。
1,使用者不需要进行包级别的编码。
2,使用者不需要熟悉XMPP XML格式。
3,提供了简单的设计以进行通讯。允许在每个消息中设置任意数量的属性,包括java对象。
4,Apache许可下的开源类库。
5,Smack的唯一必要条件是JDK1.6或者更高版本。
官方文档: http://igniterealtime.org/projects/smack/index.jsp