文章插图
文章插图
引言
「即时通信」是一种概念,最早的即时通信软件是ICQ,ICQ是英文中“I seek you”的谐音,意思是“我找你” 。
早期的ICQ很不稳定,尽管如此,还是受到大众的欢迎,后来国际上退出了不少即时通信的软件,在这里就不一一列举了,目前QQ、微信、钉钉算是中国的比较牛X的即时通信软件了 。
但是,我们今天讨论的不是这些聊天软件,我们这个课题的主要的目的是怎么开发即时通信的功能 。
我们先来了解下即时通信能做什么?
什么是即时通信?
即时通许,又称实时通讯
即时通讯(Instant Messaging,简称IM),他可以允许两人或多人使用网络实时的传递文字信息、文件、语音及视频信息,促成双方或者多方的交流 。
为什么能够实现即时通信呢?(即时通信的原理是?)
「即时通讯(im)」一般是基于「TCP/IP」和「UDP」进行通讯的,「TCP/IP」和「UDP」都是建立在更低层的IP协议上的两种通讯传输协议 。「即时通讯(im)」是以数据流的形式,将传输数据经分割、打包后,通过两台机器之间建立起的虚电路,进行连续的、双向的、严格保证数据正确性的文件传输协议 。而「TCP/IP」和「UDP」是以数据报的形式,对拆分后的数据的先后到达顺序不做要求的文件传输协议 。
「即时通讯(im)」的基本技术原理如下:
通过IM服务器登陆或注销
用户A通过列表找到B,用户B获得消息并与之交谈
通过IM服务器指引建立与B单独的通讯通道
即时通信有哪些协议?
IMPP(Instant Messaging And PresenceProtocol):即时信息和空间协议
PRIM(Presence and Instant Messaging Protocol):空间和即时信息协议
SIP(Session Initialion Protocol):回话发起协议SIMPLE(SIP for Instant Messaging and Presence Leveraging Extensiong):,SIP即时消息和表示扩展协议,即SIP的扩展协议
XMPP(Extensible Messaging and Presence Protocol):可扩展消息与存在协议
在这四种协议中,XMPP是最灵活的 。XMPP是一种基于XML的协议,它继承了在XML环境中灵活的发展性 。因此,基于XMPP的应用具有超强的可扩展性 。
经过扩展以后的XMPP可以通过发送扩展的信息,来处理用户的需求,以及在XMPP的顶端建立如:内容发布系统和基于地址的服务等应用程序 。
而且,XMPP包含了针对服务器端的软件协议,使之能与另一个进行通话,这使得开发者更容易建立客户应用程序或给一个配好系统添加功能 。
所以我们主要来聊些xmpp协议
XMPP协议
相关知识
XMPP「可扩展消息处理现场协议」,基于可扩展标记语言(XML)的协议,用于即时消息(IM)以及在线现场探测 。
这个协议允许因特网用户向因特网上的其他任何人发送即时消息 。
【即时通讯的基本技术原理 什么是即时通讯软件】XMPP是一种基于XML即时通讯协议
XMPP的官方文档是RFC 3920,这个文档定义了登录,退出,获取好友,发送消息等等的XML数据传输协议
XMPP是一个典型的C/S框架,基本的网络形式是客户端通过TCP/IP连接到服务器,通过Socket建立连接,然后再传输XML流
XMPP是一种类似于HTTP协议的一种数据传输协议,其过程就如同“解包装–>包装”的过程,只需要理解其接收的类型及返回的类型,便可以很好的利用XMPP来进行数据通讯.
XMPP官方网站
传输格式
<from>A</from>
<to>B</to>
<body>约吗</body>
可自定义传输格式为json格式
{
“from” : “A”,
“to” : “B”,
“body” : “约吗”
}
XMPP实现即时通信的准备工作
下载Openfire服务器
下载XMPPFrameWork框架
文章插图
浅尝辄止
如果想搭建xmpp开发平台,推荐一篇文章
用 Dojo 迅速搭建基于 XMPP 的即时消息通信应用
XMPP相关面试题
面试题:是否使用过XMPP,XMPP的实现原理
XMPP是一个即时通讯的协议,它定义好用于即时通讯在网络上数据传输的格式比如登陆、获取好友列表等等的格式 。
XMPP在网络传输的数据是XML格式,比如登录:将用户名和密码放在xml的标签中,传输给服务器
XMPP是一个基于Socket通讯的网络协议,目的是为了保存长连接,以实现即时通讯功能
XMPP的客户端是使用一个「XMPPFramework」框架
XMPP的服务器是使用「Openfire」,一个开源的服务器
假设客户端获取到服务器发送过来的好友消息,客户端需要对XML进行解析,使用的解析框架是「KissXML」框架
面试题:在使用XML的时候有没有遇到什么困难
发送附件(图片,语音,文档…)时比较麻烦
XMPP框架没有提供附件传送的功能,需要自己实现
实现方法,把文件上传到文件服务器,上传成功后获取文件保存路径,再把附件的路径发送给好友
目前支持我们开发的三方平台有哪些?
环信
融云、网易云、友盟、腾讯云… …
简单说下环信,因为他基本上是最老的即时通信三方sdk了
环信是一个即时通讯服务提供商
环信使用的是XMPP协议,它是在XMPP的基础上进行二次开发,对服务器Openfire和客户端进行功能模型的添加和客户端SDK的封装,环信的本质还是使用XMPP,基于Socket的网络通讯
环信内部实现了数据缓存,会把聊天记录添加到数据库,把附件下载到本地,程序猿更多时间是花到界面用户体验上
环信内部已经实现了视频,音频,图片,其他附件发送功能
使用环信可以节约时间成本
不需要公司内部搭建服务器
客户端的开发,使用环信SDK比使用XMPPFramework更简洁方便
总结
如果仅仅是想开发即时通信功能,只需要懂一点xmpp的原理及传输数据格式即可,如果想深入研究,不妨自己搭建一下开发环境,然后开发体验一下 。
- 腐女们的乐趣 麦麸在饭圈是什么意思
- 关于耸立的近义词有哪些
- 绿豆产地在哪里
- 人间四月芳菲尽的下一句是什么
- 万劫不复是什么意思 感兴趣的网友们
- 文娱委员负责宣传鼓动工作 负责的意思是什么
- 风度翩翩的意思是什么
- 促进,汉语词语,就是推动发展的说法,那么促进的意思是什么
- 开始,读音ki'shǐ,汉语词语,出自《晋书·刘波传》 开始的反义词是什么
- 希的组词有哪些