XMPP协议实现即时通讯底层书写 (一)--从RFC6121阅读开始

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>,大部分运用于客户端与服务器交互。比如 设置XX属性,订阅某人出席消息是否成功,发送一个XML节是否成功,服务器是否正常收到了。

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

message 这将是我们能自定义最多的一种消息格式了。如果你想要custom 一些数据传输,它应该够了。用到的地方:人与人交互,服务器于你交互(XXX给你留言了,XXX发布了一条新的动态),你与服务器的交互(XXX发送的消息,我已经收到了,服务器帮我记录一下我已经收到了这条消息并且告诉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吧。明天就开始动手写了,真的。

时间: 2024-10-06 02:19:04

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

XMPP协议实现即时通讯底层书写 (三) IOS XMPPFramework --IM底层架构设计+技术准备工作

最近发生了一些不是很愉快的事情,导致断更很长一段时间,很抱歉."不要炫技,理解原理,对自己的代码负责,才能对团队和项目负责"--郭前辈在群里说过的语录,让我很是欢喜和受教.鄙人写第一次写blog是在2011年,那时候写技术blog的初衷是为了写日记:今天我学到了什么知识,技术,记录自己程序猿的成长点滴.随着技术的积累,写blog为了分享:傻逼,如果你也碰到这种问题,这是我的解决方案,看了这些XXX处理好的,可以"抄"这份60分的答案来解决问题.到现在这阶段,写blo

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

我希望,This is a new day! 在看代码之前,我认为你还是应该先整理一下心情,来听我说几句: 首先,我希望你是在早上边看这篇blog,然后一边開始动手操作,假设你仅仅是看blog而不去自己对照项目,作用不是非常大.一日之计在于晨,所以怀着一颗对技术渴望,激动的.亢奋的心情去学习.你才干有所得. 嗯,就拿鄙人当时做项目来说,每天早上起来的第一件事情.就是研究XMPPFramework作者的代码,依照模块来分析和模仿书写.睡觉的时候还在思考,分析.总结... 当然我并非说每一个Dev

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

.net平台 基于 XMPP协议的即时消息服务端简单实现 昨天抽空学习了一下XMPP,在网上找了好久,中文的资料太少了所以做这个简单的例子,今天才完成.公司也正在准备开发基于XMPP协议的即时通讯工具所以也算是打一个基础吧!如果你还没有了解过XMPP请先阅读附录中链接的文章,本实例是基agsXMPP上开发的,agsXMPP是C#写的支持开源XMPP协议软件,我们可以在agsXMPP上快速构建自已的即时通讯平台,我的这个例子只是修改了服务器端,因为agsXMPP本身自带的服务器端没有实现聊天功能.

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

Jabber 是著名的即时通讯服务服务器,它是一个自由开源软件,能让用户自己架即时通讯服务器,可以在Internet上应用,也可以在局域网中应用.    XMPP(可扩展消息处理现场协议)是基于可扩展标记语言(XML)的协议,它用于即时消息(IM)以及在线现场探测.它在促进服务器之间的准即时操作.这个协议可能最终允许因特网用户向因特网上的其他任何人发送即时消息,即使其操作系统和浏览器不同.XMPP的技术来自于Jabber,其实它是 Jabber的核心协定,所以XMPP有时被误称为Jabber协议

android实现基于TCP和UDP协议的即时通讯,含android端和服务器端

这几天学习了下在android中实现即时通讯的方法,一开始,自然是从基本的网络协议中开始尝试了,这样能够最大化的私人订制自己的应用,还能学习到更多的知识,好处多多,接下来就简单介绍下两种协议的不同点吧 TCP协议:提供IP环境下的数据可靠传输,它提供的服务包括数据流传送.可靠性.有效流控.全双工操作和多路复用.通过面向连接.端到端和可靠的数据包发送.就如给悬崖上的两人通信时,他必须先把桥建好,确认桥是没问题的情况下,才把信件交过去,以后大家每次通信时,都确认下桥没什么问题,再通过这座桥来回通信了

开发手记——基于XMPP的Android即时通讯APP(一)

2015年已经走过了一个月的光景,在一月份,分享了两套视频教程.我个人看过了其中一些,还是很不错的,就是讲课的老师语速慢了点,偶尔有点发困,不知看过的朋友会不会有同感,呵呵. 关于已经开始的XMPP即时通讯客户端实际上一直是想完成的一个项目,只是一直被工作所困扰,一直没得空.好在现在有点时间,就忙里偷闲了. 那么作为第一篇文章,自然是开发环境的搭建和开发的前期准备.或许代码量不多,或许文章内容还显得很稚嫩,所以欢迎各位前辈前来拍砖,我喜欢板砖! 首先是服务器部分: 这部分不会介绍太多,因为我们的

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

登录功能完成以后包含以下代码文件: AppDelegate.h AppDelegate.m LoginViewController.h LoginViewController.m LoginUser.h LoginUser.m 以下看代码: // // AppDelegate.h // XMPP即时通讯 // // Created by Mac on 15/7/15. // Copyright (c) 2015年 聂小波. All rights reserved. // #import <UIK

开发手记——基于XMPP的Android即时通讯APP(三)

首先祝各位读者新年快乐,博主在这里给大家拜万年啦!而且马上要到元宵节,顺祝大家元宵节快乐! 上一次谈了注册和登录的编码技巧,这一次我们来谈谈加好友的技巧. [搜索用户]: XMPP协议为我们提供了完善的好友查找功能,而且通过aSmack的库,能够轻易实现模糊查找功能.为了保证应用程序的通用性.在搜索时,我们最好按如下的方法做: UserSearchManager usm = new UserSearchManager(xmppConnection); Form searchForm = usm.

XMPP-IOS即时通讯XMPP相关框架导入

只是留存一下XMPP相关框架的导入步骤,方便以后查看 一.框架地址 1.其他语言可用XMPPFramework 框架地址 http://xmpp.org/xmpp-software/libraries/ 2.下载XMPPFramework框架: https://github.com/robbiehanson/XMPPFramework 3.git clone https://github.com/robbiehanson/XMPPFramework.git 二.导入相关框架 CocoaLumbe