你如今最经常使用的软件是什么,若是我没有猜错,应该是QQ和微信,是的,他们就是即时通信软件。linux
一个可让你无时无刻,只要有网络就可以沟通的工具,就是即时通信工具。那么本教程,咱们主要以openfire为基础来说解即时通信服务器和客户端的实现。windows
毫无疑问,为了更深刻的理解openfire,咱们也会深刻openfire源码,尽量多的了解它的美丽细节。服务器
那么要实现相似QQ这样一个即时通信系统,主要会涉及哪些方面呢?Jack老师来详细为你白话一下。微信
首先,须要有服务器程序,服务器程序负责用户的登陆、消息之间的转发、离线消息的存储等。网络
例如,柳岩发了一条消息给黄晓明(哇塞,好像他们没有半毛钱关系哈)。柳岩那条消息会经过服务器,告知黄晓明。根据不一样的业务逻辑,黄晓明能够在不一样时间收到该条消息,例如黄晓明和baby在一块儿,如今没有在线,那么这条消息会存入离线。若是黄晓明在线,那么服务器会马上将消息发送给黄晓明。并发
话说,黄晓明的婚礼也太他妈贵了,Jack老师想有一天也有那么多钱,你想吗?想就,好好学习。工具
这个很简单,没有相似QQ、微信这样的客户端,怎么发送消息给服务器呢。因此,即时通信也须要有客户端。本教程,咱们也会使用strophe库,给讲解客户端的实现,其余库实现客户端的原理同样。性能
服务器和客户端须要共同制定一种规则,例如“to:xiaoming”,表示发送消息给xiaoming,这种规则就叫作通信协议。学习
QQ、微信都有本身的通信协议,一个协议的制定要考虑不少因素,因此本身制定一种协议,会花费不少的时间,咱们本套课程,使用的是已经有10几年历史的xmpp协议,xmpp协议是一种规范的协议,你能够在这里看到整个协议的文档http://xmpp.org/。优化
咱们能够在官网(xmpp.org)看到xmpp协议,这个是xmpp基金会的网站,您能够从这里看到xmpp协议和xmpp的扩展。
总之,目前为止,您只须要知道xmpp是一种即便通信协议就能够了,支持文本、视频、文件等的传输。
同时,这种协议很成熟,不少大公司都在使用,例如google。
Xmpp协议是创建在xml的基础上的,因此,看起来,xmpp协议就像一个xml。
例以下面的xmpp协议,它其实就是一个xml文本。
<message from="11@myopenfire.com" to="22@myopenfire.com"> |
xxx</message> |
即时通信服务器应该有不少功能,咱们这里总结以下:
一、私聊功能:就是用户之间进行私聊的功能。
二、组聊天功能:在一个组的用户可以进行彼此的功能,而且高效的聊天。
三、文件传输:如今的聊天工具都有文件传输功能吧。文件传输其实有离线传输,还有在线传输,用过qq的同窗,天然知道他们是什么意思。
四、语音视频聊天:这个功能开发较为复杂,可是手机和电脑上的使用率都很高,因此服务器应该支持。
五、用户的在线与离线状态:服务器应该有维护用户在线与理想的状态。
六、注册功能:最好服务器应该有注册的功能。虽然QQ都是在网页端注册的,走的是http协议,可是一个即时通信服务器有注册功能,能够是一个加分项目。不知道你理解这句话的意思没?老师耐心的给你讲一下,就是注册都是用xmpp协议来完成。
七、能够支持表情、图片传输:这个应该是标配吧。
八、服务器应该支持心跳包:心跳包能够保证在网络很差的状况下,客户端与服务器保持一个比较稳定的链接。
下面是一些经常使用的xmpp服务器,每一个服务器都有优势,可是咱们强烈建议你使用openfire,在咱们的实践中,openfire通过集群和优化,可以支撑上亿的客户端链接,若是舍得花钱买更多的服务器,那么能够扩充到更多。对于目前的状况来讲,任何一个大中小型企业选择openfire,都是足够的了,由于短期内,绝对不可能超过上亿的链接,几10、上百万就不错了。
下图是各个xmpp协议服务器的比较:
名字 | 平台 | 开源协议 | Jack老师备注 |
openfire | linux、windows、mac | Apache,很开放的一种协议 | openfire性能较高,单台可以达到30w以上的并发量。集群后,能够无限扩展。代码结构设计很合理,插件式开发,扩展能力强。这也是《openfire教程网》讲解的服务器,这个服务器明白了,那么其余服务器的原理大同小异。 |
ejabberrd | linux、windows、mac |
GPL2协议 | 它有普通版和商业版,区别是商业版性能更高。可是要使用Erlang语言开发。访问本站的大多数同窗应该都没有Erlang经验,若是选择学习这个服务器,对你们理解原理没有帮助。 |
jabberd 2.x | linux、windows | GPL2协议 | 使用C开发,效率高,可是目前没有openfire、ejarbberrd维护好。且C语言开发难度大。 |
Tigase | linux、mac、windows | AGPL协议 | 天生为集群设计,并发性很是高,每秒能够处理50w条消息,简单的集群就能够上千万人在线,可是学习难大。 |