XMPP,即时通信协议。
具体相关资料可以在各大搜索引擎找到。
本文仅做概述
XMPP出现的原因是目前IM已经成为主要的互联网应用,因此就出现了一个问题,各大运营商不互通,各自的IM有各自的架构和方式。
另一个重要的互联网应用Email,通过遵从SMTP和POP协议,让各大服务提供商互通邮件。
为了让IM软件像Email一样,实现服务商互通,于是又一帮人做出了一个标准化的即时通信协议XMPP,即时通信仅是XMPP协议实现的功能之一。
遵从XMPP协议搭建的即时通信平台就像是Email一样,任何人都可以搭建自己的IM服务器,目前有很多开源的服务器端,类似搭建Email服务器的软件一样,当搭建好以后,任何遵从XMPP的客户端都可以连接到这样的IM服务端,与任何这样的服务提供上内的用户进行即时通信。
根据以上描述,很明显,这非常的类似Email的概念,只是他是即时通信的。
最早提出这个方案并且实现是的Jabber,因此很多人也把XMPP协议称为Jabber协议,目前运用这一技术最典型的服务商是Google的Gtalk。
在互联网上搜索Jabber或XMPP协议可以找到大量资料,因为他是开源的。一下就具体说说实现方式。
其实并不神秘,计算机通信依然是最基础的Socket,本人采用的是Openfire服务端(一个免费开源的XMPP服务端程序),工作原理了解之后并不需要花费大量的精力去开发服务端,可以用现成,就像不会有人去开发Email服务端一样,作为开发人员来说,可能更关注客户端,因为客户端的实现有更大的灵活空间。
XMPP是一个协议,他才用XML文档方式实现,只是约定这个XML如何写,代表什么意思。
服务器和客户端通信用这种约定的文档格式发送消息,以便于互相能够理解,并且不同的服务提供者互相理解,简单点说就是约定好一种同样的表达方式而已,至于真正的数据传输方式依然是Socket发送字节流,只是这些字节流是XMPP定义的文档字符串转换过来的。
客户端与服务器端的一次对话是一个完成的XML文档
<stream……>
…………
…………
</stream>
当客户端发送一个<stream……>的数据过去表示连接,这时候服务端也会回发一段类似的文本过来(具体请查阅XMPP协议相关内容)
然后建立好连接,客户端和服务端就会互相发送各种各样的节来进行通话,例如发送<message……>……</message>节是发送消息,发送<iq……>……</iq>是执行查询列表,登录验证等其他功能,还有一个<presence……>……<presence/>是报告状态等。这些节,配合相应的属性,From、To、type、xmlns等就可以组合成即时通信所会遇到的所有对话或通知情况。
所以,XMPP实际上就是有这么定义通信格式的一个规定,大家按照这格式来理解和告知别的服务提供者,如果大家都遵照这样的约定,也就实现了即时通信的互联互通。
本人虽然用了开源的服务端,在客户端部分没有用任何开源的接口,用的是最基础的Socket方式,自己按照XMPP的约定格式组合XML字符串。
代码示例将在以后推出,目前只是用Socket发送XMPP定义的文档格式实现了信息通信,代码没有太多的可参考性。