android面试题-阐述一下对XMPP协议理解以及优缺点?
2017-04-18 本文已影响1474人
小怪兽打葫芦娃
自定义控件
- 一分钟实现贴纸功能
- 一分钟实现TextView高亮
- 一分钟实现新手引导页
- 一分钟实现ViewPager卡片
- 一分钟实现加载对话框
- 一分钟实现轮播图
- 一分钟实现GridView拖拽
- 一分钟实现底部导航栏
- 一分钟实现底部FragmentTabhost
- 一分钟实现多张图片选择
- 一分钟实现仿美拍直播的点赞动画
- 一分钟实现高仿今日头条视频列表
- 一分钟实现购物车加减控件
- 一分钟实现省市县三级联动
- 一分钟实现二维码生成和扫描
- 一分钟实现沉浸式状态栏
- 一分钟实现图片裁剪
- 一分钟实现视频弹幕
- 一分钟实现图片缩放
- 一分钟实现旋转选择器
- 一分钟实现ofo小黄车的引导界面
- 一分钟实现自定义ImageView外貌
- 一分钟实现向左拖拽跳转详情页
- 一分钟实现QQ首页动画特效
- 一分钟实现ViewPager上下滑动
联网
工具
数据库
源码分析相关面试题
Activity相关面试题
- 保存Activity的状态
- 深刻剖析activity启动模式(一)
- 深刻剖析activity启动模式(二)
- 深刻剖析activity启动模式(三)
- Activity Task和Process之间的关系
- 源码分析service开启Activity抛异常?activity不会抛异常
- Activity优雅退出
- onCreate源码分析
Service相关面试题
与XMPP相关面试题
与性能优化相关面试题
与登录相关面试题
与开发相关面试题
- 迭代开发的时候如何向前兼容新旧接口
- 手把手教你如何解决as jar包冲突
- context的原理分析
- 解决ViewPager.setCurrentItem中间很多页面切换方案
- 字体适配
- 软键盘适配
- 机型适配,例如三星、小米、华为、魅族等
- CardView 设置水波纹效果
与人事相关面试题
本文配套视频
3-简单阐述一下对XMPP协议理解以及优缺点?
定义:
XMPP(可扩展消息处理现场协议)的前身是Jabber,由一个开源组织产生的即时通信协议,基于可扩展标记语言(XML)的一种协议,是由IETF(国际互联网小组)通过的网络标准。
- 及时通讯:发送一则消息,对方账号马上即时接收到消息。中间没有出现延时。
底层使用 socket实现/java对tcp/ip协议的实现
基本网络结构
XMPP中定义了三个角色,客户端,服务器,网关。通信能够在这三者的任意两个之间双向发生。服务器同时承担了客户端信息记录,连接管理和信息的路由功能。网关承担着与异构即时通信系统的互联互通,异构系统可以包括SMS(短信),
MSN,ICQ等。基本的网络形式是单客户端通过TCP/IP连接到单服务器,然后在之上传输XML。
- 举个例子看看所谓的XML(标准通用标记语言的子集)流是什么样子的?
客户端:
<?xmlversion='1.0'?>
<stream:stream
to='example_com'
xmlns='jabber:client'
xmlns:stream='http_etherx_jabber_org/streams'
version='1.0'>
服务器:
<?xmlversion='1.0'?>
<stream:stream
from='example_com'
id='someid'
xmlns='jabber:client'
xmlns:stream='http_etherx_jabber_org/streams'
version='1.0'>
其他通信
客户端:
<messagefrom='juliet_example_com'
to='romeo_example_net'
xml:lang='zh-cn'>
<body>Art thou not Romeo, and a Montague?</body>
</message>
服务器:
<message from='romeo_example_net'
to='juliet_example_com'
xml:lang='zh-cn'>
<body>Neither, fair saint, if either thee dislike.</body>
</message>
客户端:
</stream:stream>
服务器:
</stream:stream>
- 以文档的观点来看,客户端或服务器发送的所有XML文本连缀在一起,从<stream>到</stream>构成了一个完整的XML文档。其中的stream标签就是所谓的XML Stream。在<stream>与</stream>中间的那些<message>...</message>这样的XML元素就是所谓的XML Stanza(XML节)。 XMPP核心协议通信的基本模式就是先建立一个stream,然后协商一堆安全之类的东西,中间通信过程就是客户端发送XML Stanza,一个接一个的。服务器根据客户端发送的信息以及程序的逻辑,发送XML Stanza给客户端。但是这个过程并不是一问一答的,
任何时候都有可能从一方发信给另外一方。通信的最后阶段是</stream>关闭流,关闭TCP/IP连接。
XMPP 的消息格式。
XMPP 协议的所有消息都是 XML 格式的,在 XMPP 中定义了 3 个顶层消息:
- 2.1 Presence
用于确定用户的状态。消息结构举例如下(每个 XML 的 node 还会有很多其他 attribute,为了简单起见这里省略,下同):
<presence from="abc@jabber.org/contact" to="def@jabber.org/contact">
<status>online</status>
</presence>
- 2.2 Message
用于在两个用户之间发送消息。消息结构举例如下:
<message from="abc@jabber.org/contact" to="def@jabber.org/contact" type=“chat”>
<body>hello</body>
</message>
- 2.3 IQ
信息/请求,是一个请求-响应机制,管理XMPP服务器上两个用户的转换,允许他们通过相应的XML格式进行查询和响应。
<iq from="abc@jabber.org/contact" id=“id11” type=“result”>
</iq>
面向连接:三次握手
- 欢迎关注微信公众号,长期推荐技术文章和技术视频
微信公众号名称:Android干货程序员