美文网首页
XMPP 与 环信的实现原理

XMPP 与 环信的实现原理

作者: axiaochao | 来源:发表于2018-08-03 14:29 被阅读0次

XMPP

The Extensible Messaging and PresenceProtocol(可扩展通讯协议)

1.XMPP是一个即时通讯的协议,它规范了用于即时通讯在网络上传输数据的格式,XMPP在网络上传输的格式为XML格式,eg:登录,把用户名和密码放到XML的标签中,传输到服务器

2.XMPP是一个基于socket 的网络协议,目的是为了保持长连接,以实现即时通讯

3.XMPP的客户端是使用一个XMPPFramework框架实现的

4.XMPP的服务器是使用Openfire,一个开源的服务器

客户端获取服务器发送过来的好友消息,客户端需要对XML进行解析,使用的解析框架为KissXML   框架,而不是NSXMLParser(苹果的解析)/GDataXML(谷歌的解析)

缺点:

1.发送图片、语音、文档比较麻烦

2.没有提供发送附件的功能,需要自己实现

实现方法:把文件上传到服务器,让后把保存的地址发送给好友

环信

1.环信是一个即时通讯的服务商

2.环信使用的是XMPP协议,它是对XMPP协议的二次开发,对服务器Openfire和客户端进行功能性模块的增加与SDK的封装,环信的本质还是使用XMPP,基于Socket的网络协议

3.环信内部实现了数据缓存,会把聊天记录添加到数据库,把附件下载到本地

4.环信内部已经实现了音频、视频、图片,等其他附件的发送功能

环信可能出现的问题

http://www.finalshares.com/read-779

优点:

1.不需要公司内部搭建服务器

2.客户端的开发,使用环信的SKD比使用XMPPFrameWork更简洁方便

XMPP的使用

1.要先下载XMPPFramework框架,并导入到工程中,XMPP 是罗宾汉森编写的开源框架

需要的头文件为

//导入头文件

#import"XMPP.h"

#import"XMPPRoster.h"

#import"XMPPRosterCoreDataStorage.h"

#import

#import"XMPPUserCoreDataStorageObject.h"

主要基于以下三个主要部分

数据传输:XMPPStream//基础通讯的服务器类,所有的数据传输都是这个类负责。

数据交换格式:XML

数据库:CoreData  // 会使用到coredata来存储数据

@property(nonatomic,strong)XMPPRoster*xmppRoster;

//好友类别的数据库

@property(nonatomic,strong)XMPPRosterCoreDataStorage*xmppRosterStorage;

//1.初始化基础服务类

_xmppStream= [[XMPPStreamalloc]init];

传输数据使用的是XML可以用DDXMLElement自定义XML格式

NSFetchedResultsController  // 可以监听数据库数据的变化

- (NSFetchedResultsController*)fetchedResultsController

{

if(!_fetchedResultsController)

{

//XMPPUserCoreDataStorageObject就是好友列表的实体

//1.查询对象

NSFetchRequest*request = [NSFetchRequestfetchRequestWithEntityName:@"XMPPUserCoreDataStorageObject"];

//2.设置排序

NSSortDescriptor*sort = [NSSortDescriptorsortDescriptorWithKey:@"jidStr"ascending:YES];

request.sortDescriptors=@[sort];

//3.获取上下文

NSManagedObjectContext*context = [[XMPPManagermanager]rosterStorageObjectContext];

//sectionNameKeyPath如果为空,表示一组

_fetchedResultsController= [[NSFetchedResultsControlleralloc]initWithFetchRequest:requestmanagedObjectContext:contextsectionNameKeyPath:nilcacheName:nil];

_fetchedResultsController.delegate=self;

}

return_fetchedResultsController;

}

//开始侦听好友列表CoreData的数据库变化

[self.fetchedResultsControllerperformFetch:nil];

*当前侦听的数据库发生后会自动触发

- (void)controller:(NSFetchedResultsController*)controller didChangeObject:(id)anObject atIndexPath:(nullableNSIndexPath*)indexPath forChangeType:(NSFetchedResultsChangeType)type newIndexPath:(nullableNSIndexPath*)newIndexPath

{

[self.friendTableViewreloadData];

}

jid 是一个Model 保存着用户的信息

XMPP 用CoreData 保存数据

实现消息发送的原理

GCDAsyncSoket — TCP用

0 -1024 操作系统的端口

1025 — 65536 可用端口

-xml2 other link flag

相关文章

  • XMPP 与 环信的实现原理

    XMPP The Extensible Messaging and PresenceProtocol(可扩展通讯协...

  • XMPP 与 环信的实现原理

    XMPP The Extensible Messaging and PresenceProtocol(可扩展通讯协...

  • IOS 问题合集 面试

    是否使用过XMPP,XMPP的实现? 环信是一个即时通信的服务提供商 环信使用的是XMPP协议,它是再XMPP的基...

  • iOS-进阶整理10 - 即时通信1 XMPP openfire

    即时通信(Instant Messaging),就是扣扣,微信它有多种实现方式,如XMPP、环信、融云等。XMPP...

  • XMPP的实现原理

    XMPP的实现原理 有没有做过即时通讯?是否使用过XMPP,讲述一下XMPP的实现原理 XMPP是一个即时通讯的协...

  • XMPP与环信

    XMPP --> 环信1.XMPP是网络层基于TCP协议,数据层基于XML协议的即时通讯协议。所以要实现通讯的话,...

  • iOS基础--即时通讯的简单总结

    即时通讯是目前最为流行的通讯方式. 即时通讯的多种实现方式: XMPP,环信,融云. XMPP基于XML的点对点的...

  • 环信(XMPP)

    一、即时通讯 什么是即时通讯? 即时通讯,又称实时通讯 即时通信(Instant Messaging,简称IM)是...

  • 03-即时通讯 环信集成

    环信 环信是在XMPP的基础上进行的二次开发 环信在网络上传输的数据是XML环信 是否使用过环信,简单说一下环信的...

  • 即时通讯

    XMPP XMPP的实现原理 XMPP是一个即时通讯的协议,它规范了用于即时通信在网络上数据传输格式的,比如登录,...

网友评论

      本文标题:XMPP 与 环信的实现原理

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