Asmack开发系列之通信数据流

即时通讯:XMPP基础 XMPP(Extensible Messaging and Presence Protocol)是一种基于标准通用标记语言的子集XML 的协议,它继承了在XML 环境中灵活的发展性。因此,基于XMPP 的应用具有超强的可扩展性。经过扩展以后的XMPP 可以通过发送扩展的信息来处理用户的需求,以及在XMPP 的顶端建立如内容发布系统和基于地址的服务等应用程序。 阅读详情

上一节,我们介绍了XMPP的基础,还没说完,说到了通信洪流,然后就结束了。这一节,我们接着讲。主要是“stanzas”(节).上一节,我们说,区分stanzas,需要从它的名字,属性TYPE和子节点来区分。这一节,我们分别介绍:消息(Message),出席/上线(Presence),信息查询(IQ)以及可扩展性(Extensibility)。

1,消息(Message)

消息<message/>是xmpp中的一种典型的“推”(Push)方法,它不需要回复,属于一种阅后即焚的的机制。适用于IM,Groupchat,alert和Notification。根据它的type属性可以分为:

1)常规(normal)

常规的消息特别像邮件消息,因为你给别人发的消息,别人可以回,也可以不回。

2)对话(chat)

对话消息是两个实体之间的实时对话,例如你和你的qq好友在聊天。

3)群组对话(GroupChat)

使用在多人的对话房间里面。

4)头条(Headline)

头条用来发送警告和通告,这种消息不需要回复。

5)错误(Error)

这种消息一般来说是对某一条消息的回复,告诉对方什么出错了。

Message出了Type这个属性,还有其他属性:
1)to 要去哪里,就是跟你对话的那个是谁(JID);
2)from,从来里来。其实你发消息给别人,from就是你,但是,这个from字段貌似不是由你来填充,而是由你的服务器来填充,为什么要这么做呢?其实,如果让你填充,你明明是张三,你填个李四过去,那岂不是欺骗(Spoofing)么。对不对。
3)id。标示这个消息是独一无二的。在调试的时候特别有用
然后,Message也可以有负载,也就是子节点。例如<body/>和<subject/>,用在一对一的对话中。
给大家一个示例:
<message from="madhatter@wonderland.lit/foo"
to="alice@wonderland.lit"
type="chat">
<body>Who are you?</body>
<subject>Query</subject>
</message>

2,出席(Presence)

 这是实时通信和其他应用不同的特性之一。出席完成什么一件事情呢?其实就是,你的QQ好友上线了,然后你的QQ列表就会把它头像点亮。这个过程就是,首先你订阅了人家的这种出席消息,也就是一般来说人家是你好友,默认是订阅的,当然他可以拒绝你的订阅(在线对其隐身)。所以Presence是一种“Publish-subscribe”发布-订阅的模式。
一个Presence的消息示例如下:
<presence from="alice@wonderland.lit/pda">
<show>xa</show>
<status>down the rabbit hole!</status>
</presence>

3,信息查询(IQ)

信息查询Info/Query(IQ)提供一种请求-响应(Request-Response)的机制,有点像HTTP里面的GET,POST,PUT方法。和<message/>不一样,IQ包只能够有一个负载,即只能够有一个子节点。而且IQ包一个请求它是必须得到响应的,这个响应可能来自对方,或者对方的服务器(这点好理解,因为当对方不可达的时候)。IQ包的Id非常重要,你请求过去的IQ包,包含一个id,而它回复的时候这个id依然是作为包的id,这样来表示对你该次请求的回应。
IQ包的type属性包含:
1)get (请求)。这种请求是向对方请求信息,类似于HTTP GET。
2)set(设置)。这个类似于HTTP POST 或者PUT。
3)result(结果)。get请求的结果,或者是set的回复(类似于HTTP 200状态码)。
4)error(错误)。当对方无法满足你的需求的时候,它会返回一个错误给你,或者它的服务器返回一个错误给你。

一个查询花名册的IQ包:
<iq from="alice@wonderland.lit/pda" 
id="rr82a1z7"
to="alice@wonderland.lit" 
type="get">
<query xmlns="jabber:iq:roster"/>
</iq>
回复:
<iq from="alice@wonderland.lit" 
id="rr82a1z7"
to="alice@wonderland.lit/pda" 
type="result">
<query xmlns="jabber:iq:roster">
<item jid="whiterabbit@wonderland.lit"/>
<item jid="lory@wonderland.lit"/>
<item jid="mouse@wonderland.lit"/>
<item jid="sister@realworld.lit"/>
</query>
</iq>

添加一个成员到花名册:
<iq from="alice@wonderland.lit/pda"
id="ru761vd7"
to="alice@wonderland.lit" 
type="set">
<query xmlns="jabber:iq:roster">
<item jid="madhatter@wonderland.lit"/>
</query>
</iq>

回复:
<iq from="alice@wonderland.lit" 
id="ru761vd7"
to="alice@wonderland.lit/pda" 
type="result"/>

它和服务器的交互过程入下图所示:
4,可扩展性
因为是基于XML的,所以可扩展性非常好,具体就这里不讲了。

5,源码解析
后续我会放出这部分的源码解析,尽请期待,同事约打CS了。88.












xmpp版即时聊天 xmpp版即时聊天即时聊天的解决方案 socket: xmpp:xmpp+openfire+asmack 常见协议通信共性 有客户端和服务端 客户端和服务端要通信,需要保持连接 开发即时通讯软件的类型 定制开发 自己搭建服务端,自己去基于xmpp协议做开发 核心:熟悉asmak.jar相关的api 集成开发 使用第三方的东西(环信,融云通讯) 核心:了解第三方api 简单聊一下socketsoc 阅读详情

相关推荐

计算机考研复试面试常问问题 数据结构篇(下)

计算机考研复试面试常问问题 数据结构篇(下) 使用前需知(拒绝白嫖,如果对你有帮助,你只需点个赞就行): 注意:有人在闲鱼上盗卖我的资料,而且还有很多同学买了,请各位擦亮双眼,我是整理出来免费分享给大家的! 大家请多点赞和评论,这样后面的同学更容易百度到,不至于被人盗卖,我就不加水印影响大家使用了! 第一次整理,度不好控制,有不好的地方希望大家理解,后面可能会改进,造福今年之后的同学们! ...

程序员宝藏的博客 1万+

端口详细说明

Terminal Services=Win2000 远程桌面 Telnet=允许远程用户登录到系统并且使用命令行运行控制台程序。 Server=提供 RPC 支持、文件、打印以及命名管道共享。 radmm=Remote Administrator (远程控制) Windows Time=设置计算机时钟。 Alerter=通知所选用户和计算机有关系统管理级警报。 Application

Ghost 1万+

【QT】基于QSerialPort的跨平台串口通信实战指南

本文是一份基于Qt QSerialPort模块的跨平台串口通信实战指南。详细介绍了从硬件基础、QSerialPort核心类使用、参数配置、设备自动发现到数据异步读写和错误处理的完整流程,并通过构建一个功能齐全的串口调试助手实例,帮助开发者快速掌握在Windows、Linux和macOS系统下进行高效、稳定的串口应用开发。

a1b2c3d的博客 982

TCP常用网络和木马使用端口对照表,常用和不常用端口一览表

【开始-运行- CMD , 输入 netstat -an 然后回车就可以查看端口】      端口:0   服务:Reserved   说明:通常用于分析操作系统。这一方法能够工作是因为在一些系统中“0”是无效端口,当你试图使用通常的闭合端口连接它时将产生不同的结果。一种典型的扫描,使用IP地址为0.0.0.0,设置ACK位并在以太网层广播。      端口:1   服务:tcp...

weixin_34161032的博客 2万+

从网格剖分到结果外推:一文拆解HFSS快速扫频(Fast Sweep)的底层逻辑与性能调优

本文深入解析了HFSS快速扫频(Fast Sweep)技术的底层逻辑与性能调优方法。通过ALPS算法实现频带外推,快速扫频相比离散扫频和插值扫频能提升3-5倍计算效率,特别适用于天线阵列、微波滤波器等宽频带分析场景。文章详细介绍了算法架构、参数优化策略及工程实践中的精度保障机制,帮助工程师高效完成电磁仿真。

weixin_28693447的博客 93

本地通知与健康数据的隐私保护方案

随着移动健康(mHealth)应用的普及,本地通知与健康数据的结合为用户提供了更加个性化的健康管理体验。然而,这种便利性也带来了严峻的隐私保护挑战。本文旨在探讨如何在移动应用中实现本地通知功能的同时,确保用户健康数据的隐私安全。本地通知与健康数据结合的技术架构隐私保护的核心技术方案具体算法实现与数学模型实际应用案例分析本文首先介绍背景知识和核心概念,然后深入探讨隐私保护的技术方案,包括算法原理和数学模型。接着提供实际代码实现和应用场景分析,最后讨论未来发展趋势和挑战。

移动开发前沿的博客 1309

Docker集群管理工具 -- Kubernetes 部署&使用说明

1. 环境准备 ip地址 主机名节点功能 172.18.41.205 k8s-master Master, etcd 172.18.41.206 k8s-node02 Node02,registry 172.18.41.207 k8s-node01 Node...

Kim_Weir的专栏 3723

Simulink智能驾驶场景探索:自动泊车系统设计与验证

自动泊车系统(APS)传感器模块:用于检测车辆周围的障碍物和其他车辆的位置。路径规划模块:根据传感器数据生成最优的泊车路径。控制器模块:根据路径规划结果生成转向角、速度等控制信号。执行器模块:根据控制器生成的信号调整车辆的方向盘、油门和刹车。在本实例中,我们将使用超声波传感器和摄像头来检测车辆周围的环境,并使用PID控制器实现自动泊车功能。通过本教程,我们介绍了如何使用 Simulink 进行自动泊车系统的仿真。背景介绍:理解自动泊车系统及其在智能驾驶中的应用。所需工具和环境。

MHD0815的博客 506

linux tcp 无法握手,为何服务器上tcp握手有的时候会超过10秒?

为何服务器上tcp握手有的时候会超过10秒?发布时间:2013-08-11 19:56:28来源:红联作者:截获的数据如下 ,请大侠帮我分析一下listening on eth1, link-type EN10MB (Ethernet), capture size 65535 bytes19:43:54.473279 IP 111.173.155.127.49842 > aligame1.f...

weixin_39538877的博客 327

基于STM32、HAL库的IP5356M快充协议芯片简介及驱动程序设计

@param hip: IP5356M句柄指针。* @param hip: IP5356M句柄指针。* @param hip: IP5356M句柄指针。* @param hip: IP5356M句柄指针。* @param hip: IP5356M句柄指针。* @param hip: IP5356M句柄指针。* @param hip: IP5356M句柄指针。* @param hip: IP5356M句柄指针。* @param hip: IP5356M句柄指针。

corlin6688的博客 1220

【maven】idea左侧External Libraries里,没有Maven的依赖包 代码飘红

文章目录1.概述M.参考 1.概述 因为内网开发,然后这几天我被隔离了,然后公司搞了一个外网的vpn能连接的云桌面,云桌面也是网络隔离的,因此只能自己拷贝相关的文件到里面。 然后我就拷贝了代码和maven仓库中的一部分,因为本地的20G一次拷贝不完,需要多次拷贝,但是我拷贝了kafka,仍然飘红。具体如下 idea左侧External Libraries里,没有Maven的依赖包 然后整了很久都没搞定,后来我自己新建了一个项目,然后引入发现是不可以的,而且框框里面的飘红。 然后我就想是不是因为缺少依赖

九师兄 4412

network服务及其启动流程介绍

概述 先说一下NetworkManager服务:从RHEL/CentOS 7开始,网络功能默认由NetworkManager以服务的形式提供。NetworkManager是一个能够动态控制和配置网络的守护进程,管理网络服务和网络连接,对应NetworkManager.service服务。 旧的 /etc/init.d/network 以及 ifup,ifdown 等静态控制脚本依然存在,但是处于备用状态,即:NetworkManager运行时,多数情况下这些脚本会调用NetworkManager去完成网络配

qq_36382062的博客 7410

骑砍2霸主MOD开发(9)-游戏大地图(MapScene)

Settlement类型由town,castle,castle_village,village,hideout五种类型组成,通过对GameEntity中添加tag实现类型的加载.大地图中军团(MobileParty)的移动速度,AI寻路,食物消耗等均和当前MobileParty所处地形有关,地形统一被定义为TerrainType,类型有森林,荒漠等.MapScene.Read("Main_map", ref sceneInitializationData, "") 装载Main_map大地图。

骑砍战团&霸主MOD开发 1623

7.xmpp版即时聊天

即时聊天的解决方案 socket: xmpp:xmpp+openfire+asmack 环信 常见协议 比较安全,tcp上还加了俩层 简单聊一下socket socket:套接字,连接需要ip和端口,分为tcp和udp两种形式 常见的术语 xmpp:基于xml的可拓展协议. jabber:xmpp的前身. openfire:支持xmpp的开源服务器 ...

weixin_30781107的博客 148

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

【转载】哇!!!这个真的是我见过最全的端口介绍了

                                                            &...

小白渣的博客 3万+

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Android开发之多级下拉列表菜单实现(仿美团,淘宝等)

我们在常用的电商或者旅游APP中,例如美团,手机淘宝等等,都能够看的到有那种下拉式的二级列表菜单。具体如图所示: 上面两张图就是美团的一个二级列表菜单的一个展示。我相信很多人都想开发一个跟它一样的功能放到自己的APP中。好,接下来我们就开始动手,解决它。 1,结构分析 首先,我们给出这个下来菜单需要的组建。我们用线框图来分析。 1)如上图所示,最外围

MiniMicall的专栏 3万+

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Android开发之一个简单的通讯录实现(源码)

通讯录就是一个ListView,我们需要通过数据库和ContentProvider来活动通讯录的数据,当然,我们应该提供选中后编辑的功能。 很简单的一个通讯略Demo,所以,直接上代码,需要的看一下就知道。不解释。 文件1: MyContacs 主活动页面。 package com.yarin.android.MyContacts; import android.app.ListActi

MiniMicall的专栏 2万+

Android开发之ScrollView中嵌套ListView的解决方案

在工作中,曾多次碰到ScrollView嵌套ListView的问题,网上的解决方法有很多种,但是杂而不全。我试过很多种方法,它们各有利弊。 在这里我将会从使用ScrollView嵌套ListView结构的原因、这个结构碰到的问题、几种解决方案和优缺点比较,这4个方面来为大家阐述、分析、总结。 实际上不光是ListView,其他继承自AbsListView的类也适用,包括Expandab

MiniMicall的专栏 2万+

阿里云Ubuntu环境搭建Docker服务

经过昨天和今天的不断奋战,在阿里云里面搭建Docker并不容易。所以我觉得有必要记录下来,以供后人学习。以及我自己的回顾。 首先,查看我们的系统版本: cat /etc/issue的到的输出是 Ubuntu 12.04.1 LTS \n \l我们顺便看一下内核版本,因为Docker需要在3.8以上运行。 uname -r可以得到你的内核版本,我因为要装docker,所以按照dock

MiniMicall的专栏 1万+

Android开发之解决APP启动白屏或者黑屏闪现的问题

在做搜芽的过程中,发现那个外包人缘做的不行,因为启动的时候会停顿,然后白屏一会,联想到几个月前我在我的三僚企业通信软件里面拉起9K-Mail的时候也会黑屏,所以决定学习一下。解决一下。这不,万能的网络还是非常有用的。 在这里总结一下。 (参考及转载:http://www.2cto.com/kf/201409/339293.html) 欢迎页启动的线程由于请求和处理的数据量过大而,导致

MiniMicall的专栏 1万+

Android开发之Gson解析Json嵌套数据

Gson解析复杂的json数据           在这里介绍解析json数据的另外一种方法就是通过Gson解析,对于解析比较简单的json数据我就不介绍了来一个比较复杂一点的json数据,如下面我们要解析的一个json数据: [java] view plaincopy String json = {"a":"100","b":[{"b1":"b_

MiniMicall的专栏 8166

XMPP协议Asmack实现文件传输的真正解决方法

在使用Asmack的过程中,文件传输是阻碍我前行的一个极大的绊脚石。在翻遍了百度和Google的情况下,依然不得其解。而偶然的一个蓦然回首,我却解决了这个问题。所以,立此贴,一来为自己记录;而来希望能够帮到后来者。我希望自己能够做出一个像微信一样的即时通信,可以发送各种富媒体,接下来看我怎么做,实现文件传输。 第一点,版本问题。 Asmack是一个开源库,地址:https://github.com/Flowdalic/asmack,如大家所看到的一样,这个GitHub并不是完整的

MiniMicall的专栏 5231

Android开发之Thread+Handler示例(打地鼠)

直接上代码 package com.mingrisoft; import java.util.Random; import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.view.MotionEvent;

MiniMicall的专栏 4948

Android开发之PullToRefresh的Click点击事件的监听实现长按删除Item

本文为原创博客,出自http://blog.youkuaiyun.com/minimicall 到今天为止,搜芽的卖家版本应该来说已经基本完成,攻坚克难的一路过来。速度也控制的比较好。 项目过程进度 从任务分配量上来看,基本还是我个人英雄主义。接下来这样不行。但暂时也没办法,师弟还需要一个学习的过程。智质不错,而且态度端正。相信搜芽买家,他就可以承担更多的开发任务了。

MiniMicall的专栏 4667

Android开发之扫描附近wifi热点并列表显示

最近项目中用到了wifi模块,今天做一个简单的总结。 参考:http://www.2cto.com/kf/201310/253617.html 1.怎样获取wifi对象并进行操作 要操作WIFI设备,需要先获取Context.getSystemService(Context.WIFI_SERVICE)来获取WifiManager对象,并通过这个对象来管理WIFI设备。  

MiniMicall的专栏 4203
上一篇: 多线程对信号的接受处理
下一篇: 祝2014中秋快乐
minimicall
博客等级 码龄18年 407粉丝 174原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值