Extensible Messaging and Presence Protocol (XMPP): Instant Messaging and Presence

ok,额瑞巴蒂,说好的阅读RFC6121開始了。希望在阅读此文之前。已经跟你的leader在时间上沟通好了。那么这篇文章在介绍RFC6121的同一时候。我会穿插一些自己当时总结到得阅读技巧分享给大家(不喜轻喷)。

在阅读每一个协议之前,每一个协议,请静下心来阅读一下这最重要的Abstract。是的,要保证你理解它的内容中每一个词语的意思,由于这个总结性的语句确实非常重要。

仅仅有真正的理解了该协议讲述的内容。你才知道这协议是否运用到了你的项目之中(妈蛋,这不废话吗,我不用它干嘛要看)。由于在我带团队的时候,跟我一起起步的伙伴们常走弯路,他们总是在 该A协议涉及到的B协议上浪费了太多的时间。事实上我们仅仅是要用到A协议,附带一部分细节须要B协议的支持(比方查询,自己定义XML节。命名规则,。。。)。

假设说这些类似于B协议你也要去阅读。那么这一天你也什么都学习不到,总结不到。这一天你都是浑浑噩噩的,不知道问题的重点,效率低下。


好的,也不要有太大的压力,放松。深呼吸。


1.introduction

除了history这节能够略微呆过外,其它的章节都须要认真阅读,这里要搞懂几个关键词:
a. language XML。XMPP-Core是什么,XML namespace 为什么要有这个东西或者说这个是用来干嘛的?
b.一个IM(即时通讯),须要有哪些功能?(细致阅读1.3节。由于这些就是我们将要构建和书写的)
c. 1.4节是干嘛用得?

呼。感觉是不是有点 学只是来了?出去抽根烟,好好总结下。歇息一会再接着看。

以下是难点和重点,希望大家带着三个疑问继续的阅读下去
1). <iq>是啥,<p>是啥,<message>是啥?
2).xmlns = 'jabber:iq:roster' 是什么
3) bareJid是什么意思?怎么定义的

请尊重作者的版权。打字非常累的.
转载请署名出处:

2.Roster 
不要心急。不要求所有看懂,这块你仅仅要了解roster是干嘛的,有哪些功能(看的时候,了解下大概的XML标签格式,不要背诵下来,仅仅要你能大概看懂一点就可以)。
一些新出现而且经常使用的标签变量。是怎么定义就可以。就好比我们看一本编程语言的书籍一样,新skill并不能掌握,可是我们能在做项目的时候,參照着书本来手打代码,然后熟能生巧的运用到以后项目中,然后skill get. oh,yeah!baby!

3.Presence
同理于看roster,标签的定义,

4.Message
同理于看roster。标签的定义

一些兴许的章节事实上都是不太用到的内容,能够不看内容,可是文件夹一定要知道,这里是干嘛的。由于在做项目的时候。可能又要回来參照着协议来改代码。


ok。又到了鄙人总结的时候了。看完了这三节以后,我想大家一定都是一头雾水了。。。哎,我也是这么过来的。

XMPP里面在消息通知中,一共同拥有三种格式类型: 
iq消息<iq></iq>,大部分运用于client与server交互。

比方 设置XX属性,订阅某人出席消息是否成功,发送一个XML节是否成功,server是否正常收到了。


presence消息<p></p>运用于大部分的出席消息显示。如:订阅某人出席消息成功后。当这个人上线了,你会收到此人的 上线<p>消息。 怎么理解呢,嗯,出席吧,roster里面好友关系,pubsub订阅关系会用到。

message 这将是我们能自己定义最多的一种消息格式了。假设你想要custom 一些传输数据,它应该够了。

用到的地方:人与人交互,server于你交互(XXX给你留言了,XXX公布了一条新的动态),你与server的交互(XXX发送的消息,我已经收到了,server帮我记录一下我已经收到了这条消息而且告诉XXX).



1). <iq>是啥。<p>是啥,<message>是啥? 我大概的已经讲了一些
2).xmlns = 'jabber:iq:roster' 是什么? your answer
3) bareJid是什么意思?怎么定义的 your answer

请讲2,3问自己解决。家庭作业懂不懂?太累了。打得我手酸。还是复制黏贴的方便。

╮(╯▽╰)╭


假设你对这些还不是非常理解。。

好吧。事实上你不理解这些都没关系。可是起码你知道个大概对吗?假设你连个大概都不知道,比方:jid是啥,<iq>,<p>,<message>是啥,roster是啥,好吧。。。

大哥,又一次看吧。

。。看不懂继续看。背也把概念的定义给我背下来。

。。


吁!~
不要着急写代码。。。骚年。你已经算是小入门了。虽然你一句有效功能的代码也写不出来,可是我还是要恭喜你,你至少算入门了。

btw1:请把RFC6121的tableContent文件夹背下来。要养成好习惯,每一个协议的文件夹大概的背诵下来,知道title讲的是啥。
btw2:去gitHub 下载IOS 版本号底层框架 XMPPFramework, 安卓的朋友下载smack(貌似是这么拼写的。。

。忘记了,安卓童鞋自己解决)

btw3:跟其它同事一起讨论交流一下。一个人的理解有限,要团队达到共识。不然到时候非常难写代码。。

btw4:下期预告<IOS XMPPFramework--简单介绍,这货怎么用?卧槽,还有作者自己解决不了的bug,WTF>
btw5:   经理,我明天就開始搭建项目了。心情好激动。。。再让我激动一天看这傻X的blog吧。

明天就開始动手写了。真的。


XMPP协议实现即时通讯底层书写 (一)--从RFC6121阅读開始的更多相关文章

  1. XMPP协议实现即时通讯底层书写 (二)-- IOS XMPPFramework Demo+分析

    我希望,This is a new day! 在看代码之前,我认为你还是应该先整理一下心情,来听我说几句: 首先,我希望你是在早上边看这篇blog,然后一边開始动手操作,假设你仅仅是看blog而不去自 ...

  2. .net平台 基于 XMPP协议的即时消息服务端简单实现

    .net平台 基于 XMPP协议的即时消息服务端简单实现 昨天抽空学习了一下XMPP,在网上找了好久,中文的资料太少了所以做这个简单的例子,今天才完成.公司也正在准备开发基于XMPP协议的即时通讯工具 ...

  3. XMPP openfire Smack 即时通讯

    重新整理下这篇文章. 这篇文章的主要任务是使用AndroidStudio,通过Openfire,利用XMPP协议完成一个可以即时通讯.拥有好友系统的聊天软件. 一.服务器配置与相关库 理论不多说,只谈 ...

  4. 开源jabber(XMPP)架设内部即时通讯服务的解决方案

    Jabber 是著名的即时通讯服务服务器,它是一个自由开源软件,能让用户自己架即时通讯服务器,可以在Internet上应用,也可以在局域网中应用.    XMPP(可扩展消息处理现场协议)是基于可扩展 ...

  5. XMPP之ios即时通讯客户端开发-配置XMPP基本信息之工程代码(五)

    登录功能完成以后包含以下代码文件: AppDelegate.h AppDelegate.m LoginViewController.h LoginViewController.m LoginUser. ...

  6. XMPP(三)-安卓即时通讯客户端

    由于时间原因,所以更新比较慢 ,还请大家谅解,此次是对上篇文章中的安卓客户端初级版本进行的一次更新优化,在这次更新后,就有那么一点样子了,可以拿的出手了,呵呵,还在关注的同学也可以及时下载更新.此次主 ...

  7. xmpp实现的即时通讯聊天(一)

    参考网址:http://www.jianshu.com/p/b401ad6ba1a7 http://www.jianshu.com/p/4edbae55a07f 一.mysql和openfire环境的 ...

  8. XMPP之ios即时通讯客户端开发-配置XMPP基本信息(四)

    前文已经有配置open fire,接下来要通过XMPP框架链接到open fire的服务器: 1.首先要在系统偏好设置里面打开open fire的服务器 2.代码中设置xmpp的myJID 有几个名词 ...

  9. XMPP之ios即时通讯客户端开发-创建工程添加XMPPFramework及其他框架(三)

    XMPPFramework GitHub: https://github.com/robbiehanson/XMPPFramework 获取源代码 git clone https://github.c ...

随机推荐

  1. linq操作符:元素操作符

    元素操作符仅返回一个元素. 一.Fitst操作符 First操作符将返回序列中的第一个元素.如果序列中不包含任何元素,则First<T>方法将引发异常.来看看First()方法的定义: 从 ...

  2. 如何在Linux系统上安装字体

    libreoffice添加字体 TrueType字体文件的扩展名是.ttf,ttf就是TrueType Font的首字母缩写 一般在 /usr/share/fonts/truetype/ 目录下,这个 ...

  3. beansbinding NetBeans IDE 中 Swing数据绑定插件

    http://my.oschina.net/u/127459/blog/111486 https://kenai.com/projects/betterbeansbinding/pages/Home ...

  4. Java设计模式(8)组合模式(Composite模式)

    Composite定义:将对象以树形结构组织起来,以达成“部分-整体” 的层次结构,使得客户端对单个对象和组合对象的使用具有一致性. Composite比较容易理解,想到Composite就应该想到树 ...

  5. 树莓派 NOOBS 安装系统

    Raspberry Pi Foundation发布了一个名为“New Out of Box Software”(NOOBS)的工具,可以用来方便的安装系统,让我们尝试一下这个新的安装工具. 以我的树莓 ...

  6. oauth2.0服务端与客户端搭建

    oauth2.0服务端与客户端搭建 - 推酷 今天搭建了oauth2.0服务端与客户端.把搭建的过程记录一下.具体实现的功能是:client.ruanwenwu.cn的用户能够通过 server.ru ...

  7. 关于Unity中的光照(三)

    法线贴图 次时代游戏用的比较多 1:法线贴图是凹凸贴图技术上 的一种应用,有时也称为Dot3(仿立体)凹凸纹理贴图;2: 法线贴图是不增加多边形的情况下,增强模型的细节;3: 法线贴图是高精度模型导出 ...

  8. 关于Unity中Vector2和Vector3的使用

    Vector2是用来定义和描述2D游戏内部的一些参数,像刚体的速度等等 Vector3是 1.鼠标点击屏幕后要转化为3D坐标的时候用到的定义和描述 2.两个物体之间的相对距离,或者说偏移量的变量类型

  9. Eclipse初次java开发问题总结-2

    今天对之前写的servlet程序做了个简单的性能测试发现了一些问题,经过解决这些问题没有再重现,有些问题自己确切知道原因,有的则不太确定. 1.配置文件读取问题 项目中使用.properties作为配 ...

  10. Maven构建自动化

    构建自动化定义相关工程项目构建过程中,在当项目构建成功完成启动的情况下,来确保所依赖的项目是稳定的. 实例 考虑一个团队正在开发一个项目总线核心API上的其他两个项目的应用程序:网页UI和应用程序的桌 ...