xmpp

2020-06-02  本文已影响0人  adalillian

 即时通讯不用环信,融云,      自己写的话,     就直接用到socket,是很复杂的。

socket简介

1.socket,又称套接字,网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket.

2.应用程序通过socket,向网络发出请求,或者应答请求。

3.网络上的请求就是通过socket来建立连接然后互相通信的。

3.服务器(apache/tomcat),

4.ip地址,局域网的设置。

5.端口号(定位程序)。 有效端口,0-65535,其中0-1024由系统使用,开发建议使用1024以上的端口。

6.传输协议:用什么样的方式进行交互,就是通讯的规则.

TCP和UDP的区别:

都是用来传输数据的。

TCP:3次握手,可靠安全,必须建立连接,效率稍低;数据大小不做限制,经常用它进行大数据传输。

例如打电话,3次握手进行的。1.拨电话,2.对方接电话(对方挂断导致第二次握手失败)。3.互相道一声(如果单方面,那还是握手失败)

UDP:无需建立连接,不安全的协议,速度快;每次数据包大小限制在64K之内。

例如,发短信1.不需要知道对方开机还是关机甚至停机   2.如果短信字数超过500次,分成多条短信发送,每条短信的大小有限制的。    3. 发完就行,不需要建立连接,但是无法知道,什么时候到了收信人的手中。


实现socket服务端的监听:

1.方法: 这部分实现监听的代码是, C语言实现的,或者对C语言进行封装(CocoAsyncSocket第三方框架)。

2.Telnet命令:   telnet    host   port/telnet     192.168.10.10    5288

telnet命令是监听服务器上的某个端口对应的服务有没有开启


oc中的协议,是实现两个不同类,使用相同的方法。

socket 层上的协议  指的是数据传输格式

http 协议: 传输格式: 

xmpp 协议: 是实现及时消息的通讯的,是一款及时通讯协议。

可扩展消息处理现场协议,是基于可扩展标记语言xml的协议,它可用于及时消息im, 以及在线现场探测。 这个协议可能最终允许因特网用户向因特网上的其他任何人发送及时消息。 

传输格式:

<from>xxxx<from>

<to>xxxx<to>

<body>xxxxxx</body>

如果你自定义即时通讯协议,json格式

{

"from":xxxx,

"to":xxxx",

"body":xxxxxx

}


IM简介

1. xmpp: the extensible messaging  and presence protocol 可扩展通讯和 标示协议

2.  xmpp是一种基于xml的及时通讯协议

3. xmpp的官方文档是rfc 3920

这个官方文档定义了登陆, 退出,获取好友,发送消息等等的xml数据传输协议。

4. xmpp是一个典型的c/s架构。 

5. 基本的网络形式是单客户端通过tcp/ip连接到单服务器,然后在之上传输xml流

6. xmpp是一种类似于http协议的一种数据传输协议,其过程就如同“解包装--包装”的过程。

只需要理解就接收的类型以及返回的类型,便可以很好的利用xmpp来进行数据通讯。

7. xmpp官方网站:       http://xmpp.org


实现的准备工作:

如果公司觉得环信,融云等等都不好用。要自己做。 

那么我们需要下载Openfire服务器。 下载xmppframework框架。


面试题:

1. 是否使用过xmpp,xmpp的实现原理?

了解过,但是之后选择了现有的sdk,使用的环信。

xmpp是一个即时通讯的协议,它定义好用于及时通讯在网络上数据传输格式的,比如登录,获取好友列表等等的格式。xmpp在网络传输的数据是xml格式。 比如登录,把用户名和密码放入xml的标签中,传输到服务器。 

xmpp是一个基于socket的网络协议,目的是为了保存长连接,以实现及时通讯功能。

xmpp的客户端是使用一个xmppframework框架。

xmpp的服务器是使用openfire,一个开源的服务器。

假设客户端获取到服务发送过来的好友消息,客户端需要对xml进行解析,使用的解析框架的kissxml的框架。


2. 使用过程遇到什么困难?

发送附件(图片,语音,文档,小视频等等)时比较困难

xmpp框架没有提供附件传送的功能,需要自己实现。 实现方法:把文件上传到文件服务器,上传成功后,获取文件保存路径,再把附件的路径发送给好友。 


3.环信是什么?简单的说下原理?

是IM(及时通讯)的SDK

比如oc里面,xxx都是对于corexxx的封装,corexxx都是对c语言的封装。

越高级的语言,层数越多,效率受到影响,但是对于开发的能力有扩大的功能,节约时间成本。

使用的是xmpp协议,并且在xmpp上进行的二次开发,对服务器openfire和客户端进行功能模型的添加和客户端sdk的封装,环信的本质还是使用xmpp,基本于socket的网络通信。

环信内部实现了数据缓存,会把聊天记录添加到数据库,把附件下载到本地,程序员更多时间是花到界面用户体验上。

环信内部已经实现了视频,音频,图片,其他附件发送功能;

环信使用公司可以节约时间成本:不需要公司内部搭建服务器, 客户端的开发,使用环信sdk比使用xmppframework更简洁方便。


服务端 把用户账号 转成环信的账号。      现有的用户登陆的时候,通过服务器,拿到环信的用户名,就用环信的用户名在后台登陆,就完成了登陆。 


环信SDK的导入

在注册的时候,注册模式:开放注册, 和授权注册有什么区别?

开放注册, 只有测试的时候才能选择。 

授权注册是发布的时候必须选择的, 过程:因为必须  保证是在公司的服务器注册的, 客户端通过环信的开发者文档用来注册环信的用户, 用公司的账号登陆的时候, 返回对应的环信的账号密码。 然后在app内部实现登陆 。 

上一篇下一篇

猜你喜欢

热点阅读