XMPP 是一种丰富而复杂的即时消息协议。 在本教程中,我们将介绍 Smack,这是一个用 Java 编写的模块化和可移植的开源 XMPP 客户端,它为我们完成了大部分繁重的工作。 2....为此,我们将在 jabber.hot-chilli.net 上创建一个帐户,这是一个免费的Jabber / XMPP服务。...它还提供了连接到服务器和登录的方法。 建立连接后,我们可以使用Smack的功能,例如聊天,我们将在下一节中介绍。 如果连接突然中断,默认情况下,Smack 将尝试重新连接。...Roster.SubscriptionMode.reject_all—— 拒绝所有订阅请求 Roster.SubscriptionMode.manual – 手动处理状态订阅请求 如果我们选择手动处理订阅请求,则需要注册一个 StanzaListener(在下一节中描述...Stanza 除了聊天之外,Smack 还提供了一个灵活的框架来发送Stanza并侦听传入的Stanza。 澄清一下,节是 XMPP 中离散的语义意义单位。
OpenFire 是采用Java开发的基于XMPP(Jabber)协议,开源实时协作(RTC)服务器。...Smack 是用 Java编 写的XMPP客户端代码库,是 spark 的核心 开源界总是有许多有趣的东东,这三个合起来就是一个完整的XMPP IM 实现。...OpenFire ——服务器端 Spark——客户端 Smack——XMPP 传输协议的实现 三者都是基于Java 语言的实现,其中XMPP是一个协议,协议是需要实现的,Smack起到的就是这样的一个作用...Smack 是一个XMPP 协议的Java 实现,提供一套可扩展的API,不过有些时候,你还是不得不使用自己定制发送的XML 文件内容的方式来实现自己的功能 三者之间的关系: ?...从上图可知,Client 端和Server端都可以通过插件的方式来进行扩展,Smack是二者传递数据的媒介。
本文将深入探讨:XMPP协议的原理即时通讯中如何使用XMPP服务基于Java Spring构建XMPP服务优雅草蜻蜓I水银版如何利用XMPP实现私有化即时通讯—-.2....XMPP(Extensible Messaging and Presence Protocol,可扩展消息与存在协议)是一种基于XML的开放式即时通讯协议,最初由Jabber开源社区开发,后被IETF标准化...即时通讯中的XMPP服务应用3.1 XMPP在IM系统中的作用一对一聊天:直接发送XML格式消息。群组聊天(MUC, Multi-User Chat):基于XEP-0045协议。...基于Java Spring构建XMPP服务4.1 使用Smack库(XMPP客户端库)Smack是Java生态中最流行的XMPP客户端库,可与Spring集成。...结论XMPP作为成熟的即时通讯协议,在企业级IM系统中仍具优势。优雅草蜻蜓I水银版通过XMPP + 私有化加密的方案,提供了安全、可控的通讯解决方案。
当然也有其他的选择。 Openfire是基于Jabber协议(XMPP)实现的即时通信服务器端版本,目前建议使用3.8.1版本,这个版本是当前最新的版本,而且网上可以找到下载的源代码。...Smack是即时通信客户端编程库,目前我已测通通过jsp使用smack的API向openfire注册用户发送消息,并且可以通过监听器获得此用户的应答消息。...正是因为使用了XML作为消息传递的中介,Extensible 才谈的上。XMPP的前身是Jabber,一个开源形式组织产生的网络即时通信协议。XMPP目前被IETF国际标准组织完成了标准化工作。 ...这个页面中第一个选项,即标准数据库连接,不要选择嵌入的数据库(Embedded Database,嵌入的数据库是hsqldb数据库,生产环境不要选择此选项),然后点”继续”: ?...从上面的聊天记录我们发现所有的用户id全称都是:用户名@域名/资源名,这个就是我们在XMPP协议中通常说说的JID,即jabber id,它是一个xmpp协议帐号系统的通称,后面我们在使用smack编程库调试接口时会经常用到这个参数
在‘jabber:client’命名空间中,节应当处理‘to’属性,虽然,由服务器处理的从客户端到服务器端的节不应该拥有‘to’属性。 ...服务器不准发送给客户端一个不包括‘from’属性的节,它必须设想节是从服务器到已连接客户端。 ...注:'jabber:client'与'jabber:server'命名空间是接近同一的,但用在不同的上下文中(客户端到服务顺通信用 'jabber:client'与服务器到服务器通信用'jabber:server...这两个仅有的不同是‘to’与‘from’属性在 'jabber:client'中发送的节中是可选的,然而在'jabber:server'中发送的节是必须的。...如果一个兼容实现接受一个由 'jabber:client'或'jabber:server'命名空间认证合格的流,它必须支持所有三个核心节种类的(消息,出席,与IQ)通用属性(9。1节)与基本语义(9。
= new XMPPTCPConnection("mtucker", "password", "jabber.org"); connection.connect(); connection.login...1)无需熟悉XMPP的XML格式,甚至都不需要了解XML 2)提供了简单的M2M通信 Smack让开发者可以对每条消息都设置大量的属性,属性中还可以包含Java对象。...3)基于Apache许可证的开源代码,这意味着你可以把Smack放入你自己的商业软件中。 四、Smack库的组成 Smack库可以内嵌到任意的Java应用程序中。...初始化是通过配置文件来完成的。默认情况下,Smack会载入Smack JAR文件中内嵌的配置文件(它位于org.jivesoftware.smack/smack-config.xml)。...这个指定的配置文件包含了一系列需载入初始化的类列表。所有的管理器类型的类都需要被初始化,这些管理器类就包含在上面所说的初始化列表中。
在此定义的仅有的XML节是,,元素,由流的缺省命名空间验证,在XML节(第9节)中描述;为传输层安全(TLS:Transport Layer Security...4.3 流安全 当在XMPP1.0中协商XML流时,TLS应当按TLS应用(第5节)所定义的来使用,SASL必须按SASL(第6节)所定义的来使用。...8) 根据从初始实体接收的新流头,接收实体必须靠发送一个新XML流头给有可利用特征(不包括STARTTLS特征)的初始实体来响应。...1步:客户端初始流给服务器: <stream:stream xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org...<stream:stream xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams'
,分为tcp和udp两种形式 常见的术语 xmpp:基于xml的可拓展协议. jabber:xmpp的前身. openfire:支持xmpp的开源服务器 smack.jar:对xmpp协议封装.方便开发的...XMPP的前身是Jabber,一个开源形式组织产生的网络即时通信协议。 xmpp特点: 开放: XMPP协议是自由、开放、公开的,并且易于了解。...标准: 互联网工程工作小组( IETF )已经将Jabber的核心XML流协议以XMPP之名,正式列为认可的实时通信及Presence技术。...安全: 任何XMPP协议的服务器可以独立于公众XMPP网络(例如在企业内部网络中),而使用SASL及TLS等技术的可靠安全性,已自带于核心XMPP技术规格中。...如意通的安装-->xmpp客户端2 pc端-服务器-pc端演示 smack常见api的查看.
tcp和udp两种形式 常见的术语 xmpp:基于xml的可拓展协议. jabber:xmpp的前身. openfire:支持xmpp的开源服务器 smack.jar:对xmpp协议封装.方便开发的jar...XMPP的前身是Jabber,一个开源形式组织产生的网络即时通信协议。 xmpp特点: 开放: XMPP协议是自由、开放、公开的,并且易于了解。 ...标准: 互联网工程工作小组( IETF )已经将Jabber的核心XML流协议以XMPP之名,正式列为认可的实时通信及Presence技术。 ...安全: 任何XMPP协议的服务器可以独立于公众XMPP网络(例如在企业内部网络中),而使用SASL及TLS等技术的可靠安全性,已自带于核心XMPP技术规格中。...如意通的安装-->xmpp客户端2 pc端-服务器-pc端演示 smack常见api的查看.
5) 任何包含在XML元素中的XML字符数据,在SASL协商期间使用,必须使用base64编码,编码在RFC3548第三节有定义。 ...步1:客户端初始流给服务器: <stream:stream xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org...='1.0'> 步11:服务器通过发送流头来响应客户端,伴随有任意另外的特征(或空特征元素): <stream:stream xmlns='jabber:client' ...成功SASL协商后(不是前),它通过发送响应流的头表示给客户端: 服务器广告资源绑定特征给客户端: <stream:stream xmlns='jabber:client' ...xmlns='jabber:server' xmlns:db='jabber:server:dialback'> 注:在根流元素中,‘to’与‘from’属性是可选的。
方案2、使用XMPP协议(Openfire + Spark + Smack) 简介:基于XML协议的通讯协议,前身是Jabber,目前已由IETF国际标准化组织完成了标准化工作。...对各个方案的优缺点的研究和对比,推荐使用MQTT协议的方案进行实现,主要原因是:MQTT最快速,也最省流量(固定头长度仅为2字节),且极易扩展,适合二次开发。...注意:在新版本的Android SDK中可能会遇到以下错误。...2> 重新配置项目的Java Build Path(右键菜单中的Properties选项中)。 3> 重新打包发布即可。 运行效果如下: ?...from client tokudu/9774d56d682e549c on address 192.168.28.39:3345 其中的“9774d56d682e549c”就是对应的客户端ID号。
在这四种协议中,XMPP是最灵活的。 XMPP是一种基于XML的协议,它继承了在XML环境中灵活的发展性。因此,基于XMPP的应用具有超强的可扩展性。...4、XMPP协议示例 客户端: to='example.com' xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams...' version='1.0'> 服务器: from='example.com' id='someid' xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org...其中的stream标签就是所谓的XML Stream。在与中间的那些…这样的XML元素就是所谓的XML Stanza(XML节)。...SIP是IETF中为终端制定的协议。SIP一般考虑用在建立语音通话中,一旦连接以后,依靠如实时协议(RTP)来进行实际上的语音发送。但SIP不仅仅能被用在语音中,也可以用于视频。
1 介绍 1.1 概要 XMPP是一个开放的可扩展标记语言[XML]协议,用于近实时的消息、出席与请求-响应服务。基本语法语义最初是由Jabber开源社区在1999年开发的。...2002年,XMPP工作组授权开发一个Jabber协议的改写本,将适用于IETF的即时消息(IM)与出席技术。 ...XMPP Client------------Server------------Server TCP TCP ...网关与服务器间的通信,网关与外部消息系统间的通信,均未在此文档中定义。...任意此类实体均以与RFC2396[URI]一致的格式来唯一设定地址。由于历史原因,XMPP实体的地址称作Jabber标识符或JID。
var xotree = new XML.ObjTree(); var xml = xotree.writeXML(jsonstring); //使用jkl-dumper.js中的...var temp = { "iq": { "-xmlns": "jabber:client", "-id": id, "-type...function newopen() { // jabber:client' to='127.0.0.1' version='1.0' from='wuxinzhe...:client", "-to": to, "-version": version, "-from": from, "-id...链接openfire的 this.
坑一:用对Http Client 1.1 feign中http client 如果不做特殊配置,OpenFeign默认使用jdk自带的HttpURLConnection,我们知道HttpURLConnection...坑三:单服务设置超时时间 从上一节的讲解我们看到,需要对serviceC单独设置一个超时时间,代码如下: feign.client.config.serviceC.connectTimeout=2000...feign.client.config.serviceC.readTimeout=60000 这个时间会覆盖第一节中默认的超时时间。...1.同一实例最大重试次数,不包括首次调用,配置如下: serviceC.ribbon.MaxAutoRetries=1 这个次数不包括首次调用,配置了1,重试策略会先尝试在失败的实例上重试一次,如果失败...2.同一个服务其他实例的最大重试次数,这里不包括第一次调用的实例。
,如UserID是livsun1@z00189374/Smack,livsun1@z00189374是对话请求的接收方,/Smack说明用户是在哪个终端登陆的,可以缺省不写。...为了满足用户自定义需求,Smack提供了第二种方式,它可以为message添加一些附加属性,在message中他们只显示为String字段。...,在一、二中,没有设置这项,接受的数目有服务器决定。...这里用到的方法都是MultiUserChat的方法,具体可以去看Smack的API文档。...4.2管理好友 用户可能需要添加其他用户到自己的Roster中,并可以获取这些用户的状态更新。
包括服务器端——Openfire,客户端——Spark,XMPP 传输协议的实现——Smack(记住,XMPP是一个协议,协议是需要实现的,Smack起到的就是这样的一个作用)。...从图上可以了解到,client 端和server端都可以通过插件的方式来进行扩展,smack是二者传递数据的媒介。...,与另外的Client 通信等功能。...,关于IQProvider 你可以查询Smack API,简单的来讲是处理你自定义的IQ 处理器。)...build.xml 文件中的内容。
目录 1 什么是RPC 2 RPC 使用的步骤 3 RPC相关函数 4 代码实现 4.1 服务端代码实现 4.2客户端代码实现 4.3程序实现结果 ---- 1 什么是RPC ---- Remote Procedure...conn.Call(“服务名.方法名”,传入参数,传出参数) 3 RPC相关函数 ---- 1,注册rpc服务 func(server *Server) RegistName(name string...首字母大写 方法必须两个参数,都是导出类型,内建类型 方法的第二个参数必须是“指针”(传出参数) 方法只有一个error 接口类型的 返回值 如: type World struct { }...socket — conn 3,调用远程函数 func (client *Client) Call(serviceMethod string, args interface{}, reply interface...方法需要的数据。 reply:传出参数。定义 var 变量,&变量名 完成传参。