美文网首页即时通讯
即时通讯(三)

即时通讯(三)

作者: 春风依旧 | 来源:发表于2018-12-31 23:44 被阅读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框架没有提供发送附件的功能,需要自己实现

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


    相关文章

      网友评论

        本文标题:即时通讯(三)

        本文链接:https://www.haomeiwen.com/subject/sssglqtx.html