即时通讯

即时通讯(三)

2018-12-31  本文已影响12人  春风依旧

一、即时通讯简述

1、即时通讯,又称实时通讯
2、即时通讯(Instant MessageIng,简称IM) 是一个实时通信系统,允许两人或者多人使用网络实时的传递文字消息,文件,语音与视频交流
3、即时通讯的第三方厂商:
①、环信
②、融云
③、网易云信
④、使用XMPPframework第三方框架
⑤、使用Socket写一个通讯协议(自己写一个协议)

二、常见的通讯协议

通讯协议.png

三、XMPP协议讲解

什么是XMPP

1、XMPP(XML,Messages,Presence,Protocol)是可扩展通讯和表示协议;基于XML(可扩展标记语言)
2、XMPP是一个典型的Clien/Server架构,基本的网络形式是客户端通过TCP/IP连接到服务器,通过Socket建立连接,然后在之上传输XML流
3、XMPP是一种类似于HTTP协议的一种数据传输协议,其过程就如同“解包装 --〉包装”的过程。只需要理解其接收的类型及返回的类型,便可以很好的利用XMPP来进行数据通讯

XMPP原理.png
XMPP实现原理

1、规范了用于即时通信在网络上数据传输格式的,比如登录,获取好友列表等等的格
2、XMPP是一个基于个Socket通过的网络协议,目的是为了保存长连接,以实现即时通讯功能
3、XMPP的客户端是使用一个XMPPFramework框架实现
4、XMPP的服务器是使用Openfire,一个开源的服务器
5、客户端获取到服务器发送过来的好友消息,客户端需要对XML进行解析,使用的解析框架的KissXML框架,而不是NSXMLParser/GDataXML

XMPP遇到的问题

1、群组消息同时推送过来的压力

在xmpp登录以后,需要通过接口获取群列表,在使用for循环进行请求每个群的离线消息,如果距离上次时间太长,就会有很多离线消息等待解析,存储到数据库。
解决方法:采用异步请求服务器,获取离线消息,使用多线程来执行消息的数据库存储。使用主线程来把用户加入到当前群。

2、当过多消息同时推送过来,内存耗用过多,cpu耗能过大造成卡顿

主要是xmpp框架中有内置的coredata数据库,每条消息会存储到coreData中。并且这个是xmpp内部控制的。
解决方法。在xmpp框架中,手动设置信息不保存到coreData中。我们是用的fmdb来保存消息。

3、发送附件(图片,语音,文档…)时比较麻烦

XMPP框架没有提供发送附件的功能,需要自己实现

实现方法,把文件上传到文件服务器,上传成功后获取文件保存路径,再把附件的路径发送给好友


上一篇下一篇

猜你喜欢

热点阅读