![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
OpenFire
文章平均质量分 71
大饼卷馒头蘸米饭
生前何必贪睡,死后自会长眠!
展开
-
即时通讯软件openfire+spark+smack
开发你自己的XMPP IM - [J2EE] 这几天查国内外的资料,发现国内关于这方面间的软件资料太少了,就想在这里写几篇关于此类IM 软件开发的文章。不过别看东西小,涉及的模块可不少。所以我基本上分为三篇文章来介绍此类软件的开发:第一篇是关于XMPP 协议是啥,IM 是啥以及一个比较有名的开源实现,该开源实现包括三个部分(Spark、Smack和Openfire);第二篇讲如转载 2013-08-13 12:56:43 · 2258 阅读 · 0 评论 -
【插件开发一】开发简单OpenFire插件
废话不说,直接进入主题。(如何部署、运行OF源码,请参照别的文章)。1.部署成功后的openfire源码如下图,2.转到Navigator视图下,3.看of的插件目录结构,以后自己生成的插件目录结构也应该是这种结构的,4.再回到Packager Explorer视图下,右键->new->source foulder,创建一个源代码目录,5.在源代原创 2013-08-07 10:50:54 · 9268 阅读 · 3 评论 -
【插件开发三】开发继承IQHandler的插件
OF的插件开发有四种方式,下面讲述如何Register a plugin as an IQHandler。IQ handlers相应包中特定的元素名或命名空间。继承IQHandler的插件,需要注册到IQRouter中去,以下是注册一个继承IQHandler的插件到IQRouter中的代码:IQHandler myHandler = new MyIQHander();IQRouter iq原创 2013-08-07 10:09:37 · 4700 阅读 · 2 评论 -
【插件开发二】开发OpenFire的消息拦截器
如何开发OpenFire插件,请参照【插件开发一】开发简单OpenFire插件:http://blog.csdn.net/majian_1987/article/details/9813467;开发消息拦截器的步骤跟开发简单插件步骤一样,直接上代码,要开发消息拦截器插件,就需要插件类实现Plugin接口和PacketInterceptor接口。package com.bis.plu原创 2013-08-07 11:04:57 · 5724 阅读 · 0 评论 -
【插件开发四】开发OpenFire插件实现Component方式
开发OpenFire插件实现Component方式时,Components可以接收一个特定子域(sub-domain)的所有包。比如test_componet.example.com。所以,一个发送给joe@test_componet.example.com的包将被转发给这个componet。具体我还没有研究,先做个记录,以后 有时间补上,官方带的,braodcast用的是第一种,compon原创 2013-08-07 11:30:51 · 3002 阅读 · 1 评论 -
smack处理收到的Packet
Smack提供灵活的框架来通过两种构造处理收到的 packet:org.jivesoftware.smack.PacketCollector —— 一个让您同步等待新packet的类。org.jivesoftware.smack.PacketListener —— 一个异步通知您引入的packet的接口。packet监听器用于事件样式的编程,而packet收集器有一个可以做轮询和阻转载 2013-08-06 16:41:38 · 2534 阅读 · 0 评论 -
openfire_3.8.2集群配置
测试机4台1.四台机器都安装openfire,随即一台安装mysql,执行openfire_mysql.sql脚本。2.四台机器都配置到同一个mysql机器上(不能使用openfire内嵌的数据库),使用同一个域名。3.四台机器都安装和插件,Hazelcas就是openfire_3.8版本以后自己的集群插件(也是个开源集群插件,摒弃了oracle的商业收费集群插件),broadcast原创 2013-07-26 14:13:07 · 2900 阅读 · 0 评论 -
OpenFire匿名登陆
客户端匿名登陆代码:package com.bis.smack.client;import org.jivesoftware.smack.Chat;import org.jivesoftware.smack.MessageListener;import org.jivesoftware.smack.XMPPConnection;import org.jivesoftware.smac原创 2013-08-02 11:29:31 · 5683 阅读 · 0 评论 -
openfire插件编写进阶,拦截数据包与发送广播
openfrie官网插件开发人员指南,中文版:http://www.blogjava.net/jyleon/articles/254197.html分析了openfire的官方插件,插件的import里大概有4中包中的东西,openfire包,dom4j包(这个是解析xml的),tinder包(这个包里有一些xmpp packet的封装),slf4j包(这个包是logger相关转载 2013-08-01 17:49:53 · 2775 阅读 · 0 评论 -
【openfire插件开发】packet分类路由(职责链模式yes or no)
最近看到Design Patterns的Chain of Responsibility(职责链模式),印象最深的一点是Client的请求会沿着一条链往后走。非常像Openfire里边处理客户端的packet的过程(也是有一条链存在的)。那么openfire到底有没有用到职责链模式呢?我带着疑问,重温了一下openfire处理packet的过程。可以看到StanzaHandler转载 2013-08-01 17:34:14 · 1397 阅读 · 0 评论 -
Smack 实现的Pub/Sub
Smack提供了一套发布订阅消息的功能API。代码如下:发布:package com.bis.pub;import org.jivesoftware.smack.XMPPConnection;import org.jivesoftware.smackx.pubsub.LeafNode;import org.jivesoftware.smackx.pubsub.Payload原创 2013-08-01 16:22:53 · 4305 阅读 · 1 评论 -
从eclipse部署运行openfire
其实我发现了,网上流传的方法都只适用于作者自己。1,先下载源码最新版本3.8.2:http://www.igniterealtime.org/downloads/index.jsp2,源码解压缩后,文件夹名叫openfire_src,用eclipse部署,在workspace工作目录里面建立openfire_src文件夹,接着根据eclipse导入源码,以下是导入后截图:jar包等转载 2013-07-26 13:43:17 · 1269 阅读 · 0 评论 -
Openfire 性能优化
Openfire 是一个XMPP协议的IM Server。基于MINA的java nio服务器。一般就是使用mysql来作为数据库,保存配置配置信息、离线信息、用户数据。官网的数据是支持5000人同时在线,使用connectionManager可以实现支持3.3万人在线。这数据一点都不漂亮,只能作为一个类似腾讯通的局域网聊天工具使用。首先说点题外话,我测试用connec转载 2013-07-31 15:24:57 · 1591 阅读 · 0 评论 -
androidpn-client重要BUG-锁屏掉线解决方法
在网上androidpn上的BUG基本都解决了,也多亏牛人们顶力相助,灰常感谢啊。在这里要说的问题是手机锁屏后,客户端心跳包不再发送了。由于android也接触不是很久,对一些系统的机制不太了解,经过多次测试与分析,才发现了是由于锁屏后CPU处于睡眠状态,线程都被挂起,所以在服务器端设定的闲置时间内收不到心跳包,强制移除用户下线。OK问题已经找到了就好办多了,既然是被挂起了我们就只有让心跳一直转载 2013-08-09 15:20:54 · 2813 阅读 · 2 评论 -
IM设计思考:XMPP安全机制
XMPP(Extensible Messaging and Presence Protocol)是一个应用于实时通信的开放协议,定义了有关即时消息通信的各方面内容,本文主要是关于XMPP安全机制的介绍以及设计实现思考。XMPP包含一个保证流安全的方法来防止篡改和偷听,包括两个层次的安全机制,分别是TLS(Tansport Layer Security)和 SASL(Simple Authe转载 2013-08-12 16:53:43 · 1773 阅读 · 0 评论 -
openfire插件开发的几点说明
1.关于插件的目录结构这个网上的资料很多,但是我觉得要看懂也不太容易,我这里上一个包括了jsp和servlet的图,希望大家能马上看懂:ME的Navigator视图下的截图:build path配置这里要注意,如果你的plugin里边有自己的jsp文件,那最好把整个openfire_src/work/lib下的包引进来,以免ant编译时找不到jasper类而报错。当转载 2013-08-12 15:53:32 · 4611 阅读 · 1 评论 -
认识smack中的基本对象 - Presence对象
一 Presence对象介绍与IQ一样,Presence也是继承自XMPP的基类Packet信息包,Presence主要有两个用途:1)告诉服务器所有客户端当前所处的状态,2)发出添加/删除好友请求;每个Presence信息包都有一个类型属性Presence.Type,如下:available: 表示处于在线状态 unavailable: 表示处于离线状态 subscribe: 表示发转载 2013-08-12 17:12:42 · 6389 阅读 · 0 评论 -
IM设计思考:点对点消息交换
IM最基本的功能就是即时消息交换,那么一个送出的消息将经历哪些过程才能最终送达目的地?下面给出一个过程描述:1. 消息从客户端发出经过网络由客户端所直接连接的服务器接收2. 接入服务器接收到网络字节流后重组消息包(协议解包的过程)3. 合法性判断- - 只有已登陆的用户才能发送消息- - 消息包的长度限制4. 协议分析(得到消息的类型、格式、目的地等)然后交给合适的程序转载 2013-08-12 16:48:22 · 1483 阅读 · 0 评论 -
认识smack中的基本对象-Packet
一 对象介绍Packet是XMPP中信息包的基类,所有存储信息的对象都要继承该类。每个Packet对象必须有一个唯一的ID号,该ID号有系统自动生成,不过也可以自己指定。其常见的字段有"to"、“from"等,Packet的每个属性都由一个键值对表示,键名为字符串类型,键值可以是java的原始类型,也可以是一个序列化的对象。Base class for XMPP packets. Ev转载 2013-08-12 17:18:05 · 1290 阅读 · 0 评论 -
认识smack中的基本对象 - Registration
一 Registration类的介绍Registration是信息查询包IQ的子类,所以它也包含表示操作类型的四个属性:GET/SET等,当其类型属性为GET时,表示从服务器获取注册对象的信息;而SET类型则表示创建用户,或者是更新已有用户的账户资料。当创建一个新账户时,XMPP服务器会需要一系列的其他属性值,标准的账户属性值列表如下:name: 用户名称first: 用户的姓la转载 2013-08-12 17:17:17 · 1977 阅读 · 0 评论 -
认识smack中的基本对象 - 接口PacketFilter
一 接口PacketFilter的介绍该接口定义了一种过滤packet对象的方法,对于一个packet结果集,只取具有指定属性的子集。该接口主要用于创建packet的监听器(listener)和收集器(collector),通过PacketFilter对监听器和收集器需要处理的packet进行过滤,让他们去处理指定的一部分packet。Smack中已经预定义了一些基本的packet过滤器,转载 2013-08-12 17:16:16 · 2213 阅读 · 0 评论 -
认识smack中的基本对象 - Roster对象
一 Roster对象介绍将其翻译成中文为"花名册",用来表示一个用户的所有好友清单以及申请加好友的用户清单,为了便于管理,Roster中的用户分组进行管理。当其他用户想申请加好友时,需要向该用户发出一个subcription请求,处理请求的模式有三种:accept_all: 接收所有请求;reject_all: 拒绝所有请求;manual: 手工处理所有请求二 常用方法转载 2013-08-12 17:14:36 · 5867 阅读 · 0 评论 -
IM设计思考:XMPP资源绑定
XMPP协议设计中引入了一个抽象的资源绑定过程,何为资源,如何绑定?首先这得从JID的格式设计说起,JID是XMPP前身Jabber协议ID的简写,用于唯一标识一个客户身份。一个合法的 JID 包括一组排列好的元素,包括域名(domain identifier),节点名(node identifier),和资源名(resource identifier),如下:jid = [转载 2013-08-12 16:59:15 · 2013 阅读 · 0 评论 -
openfire主要插件介绍
这次我们来介绍下openfire提供的可选插件,方便大家在开发中使用。openfire插件下载地址:http://www.igniterealtime.org/projects/openfire/plugins.jsp使用插件时大家请一定要注意插件支持的openfire版本,不要搞错了,否则是不能运行的。Broadcast最新版本 1.8.2广播消息插件,主要是将用户在群组转载 2013-08-12 12:50:04 · 16046 阅读 · 3 评论 -
AndroidPN中的心跳检测
在AndroidPN客户端里存在着心跳检测功能。就是每隔一段时间客户端向服务器端发送一个消息,以检测连接是否正常,发送的消息内容为: 心跳检测频率时间在SmackConfiguration类中设置: 心跳检测任务的定义及开启在PacketWriter类中: 心跳检测的流程:1.按心跳时间定时向服务发送心跳数据包;2.如果发送失败,抛出发送失败的异常;原创 2013-08-09 16:15:30 · 5490 阅读 · 3 评论 -
XMPP——Smack[6]离线消息和离线文件的实现
终篇,三天所学所用,也就这些,如果需要大家要自己去查资料研究研究,功能其实可以很强大的可惜界面做得不好,一大短处,从大一迄今没整好,主要是个人审美不行,哎毕业季呀毕业季,明天摆摊卖书,再半月就可能和生活四年的兄弟姐妹说再见,考研考公务员工作的,各奔东西了,我也将南下杭州感慨,天下无不散之筵席在此祝所有刚毕业的,学业事业有成吧不废话了,貌似最近太感性了,理科男,伤不起呀转载 2013-07-26 10:27:14 · 1444 阅读 · 0 评论 -
XMPP——Smack[4]状态,心情,头像更改
这里写完,最基本的IM功能也就完了,还剩下个发送接收文件,离线消息扩展等等呵呵,三天时间,看的不是很深入,欢迎大家补充呀1. 修改自身状态包括上线,隐身,对某人隐身,对某人上线[java] view plaincopyprint?public static void updateStateToAvailable(XMPPConnection转载 2013-07-26 10:25:12 · 1158 阅读 · 0 评论 -
IM学习--smackDemo
使用之前先下载Smack,然后把Smack开发的jar引入到项目中。package com.bis.smack.client;import java.util.Collection;import org.jivesoftware.smack.Chat;import org.jivesoftware.smack.Connection;import org.jivesoftware.s转载 2013-07-26 09:53:53 · 2503 阅读 · 0 评论 -
XMPP——Smack[2]会话、消息监听、字体表情和聊天窗口控制
上一篇是连接,登陆登出和账户管理继续连接之后,拿到了connection,通过它可以搞定会话1. 建立一个会话[java] view plaincopyprint?MessageListener msgListener = new MessageListener() { public void processMessage(Chat chat,转载 2013-07-26 10:23:03 · 1306 阅读 · 0 评论 -
Smack文档(翻译)
Contents:概要 入门指南 管理连接 信息基础 角色与状态 处理数据包 服务架构 包属性 调试Smack 隐匿 Smack扩展手册 概要:Smack 是一个与XMPP服务器进行实时通讯的客户端库,包括即时信息与聊天组。Smack优势:易于使用,且功能强大的API。与用户通讯可以在只有几行代码View Code Connection co转载 2013-07-25 22:50:41 · 1126 阅读 · 0 评论 -
Smack开发Demo一------管理连接
ConnectionConfiguration config = new ConnectionConfiguration("wang-think"); config.setCompressionEnabled(true); config.setSASLAuthenticationEnabled(true); connection = new XMPPConnection(config原创 2013-07-25 21:34:47 · 1652 阅读 · 0 评论 -
XMPP协议的原理介绍
XMPP(可扩展消息处理现场协议)是基于可扩展标记语言(XML)的协议,它用于即时消息(IM)以及在线现场探测。它在促进服务器之间的准即时操作。这个协议可能最终允许因特网用户向因特网上的其他任何人发送即时消息,即使其操作系统和浏览器不同。 XMPP的前身是Jabber,一个开源形式组织产生的网络即时通信协议。XMPP目前被IETF国际标准组织完成了标准化工作。标准化的核心结果分为两部分;转载 2013-07-25 20:33:34 · 1035 阅读 · 0 评论 -
openfire插件开发的四种方式
openfire 的插件可以访问所有openfire的API。这给我们的插件实现提供了巨大的灵活性。以下提供了四种比较常用的插件集成方式。1、Register a plugin as a Component。 Components可以接收一个特定子域(sub-domain)的所有包。比如test_componet.example.com。所以,一个发送 给joe@test_componet.e转载 2013-08-01 10:59:15 · 3506 阅读 · 0 评论 -
Openfire 用户离线、断线 及心跳检测
客户端登出分为正常离线和断线,正常离线会发送presence 消息通知服务器,断线则无通知发送。1. 正常离线:客户端在离线之前发送由PresenceRouter 路由到PresenceUpdateHandler 中处理。判断Type为unavailable 之后先进行广播,再设置session的状态,再更新presenceManager中用户最后一次的状态。pre转载 2013-08-01 10:58:13 · 1963 阅读 · 0 评论 -
Openfire源码分析
源文地址:http://www.bitiliu.com/archives/tag/openfire 1. OpenfireOpenfire是开源的实时协作服务器(RTC),它是基于公开协议XMPP(也成为Jabber)消息的。Openfire的核心功能可以概括为:连接管理、消息解析、消息路由、消息发送。1.1 框架Openfire核心功能由Module组成,上图中的各个模块转载 2013-08-01 14:56:38 · 1264 阅读 · 0 评论 -
openfire--好友管理各种状态纠结
好友花名册官方解析:ofRoster (buddy rosters or lists)Column Name Type Length DescriptionrosterIDNUMBERn/aID of roster (Primary Key)usernameVARCHAR32User NamejidTEXTn/转载 2013-08-01 14:10:46 · 2270 阅读 · 1 评论 -
Openfire 离线消息的处理机制
OfflineMessagetrategy:离线消息的处理策略类。1.静态成员变量type 用来设置消息的处理类型,主要包括:打回 丢弃存储,在超限情况下打回存储,在超限情况下丢弃2.静态成员变量quota 标识最大所能存储的message总和大小默认为100k。3.支持OfflineMessageListener事件监听器,只要实现此接口并加入到监听器列表,则在消转载 2013-07-31 15:19:31 · 2631 阅读 · 0 评论 -
OpenFire插件开发笔记
OpenFire插件开发笔记插件核心类,也就是保存聊天记录的类。这里对PacketInterceptor、Plugin进行继承。如果开发插件就一定要继承Plugin,而继承PacketInterceptor是拦截用户发送的消息包。对消息包进行过滤、拦截,保存我们需要的数据。openfire 的插件可以访问所有openfire的API。这给我们的插件实现提供了巨大的灵活性。以下提供了四种比较常用原创 2013-07-30 13:34:17 · 1629 阅读 · 0 评论 -
部署、编译、运行spark
一、利用 svn 方式下载 spark 代码a) 点击如下 Windows::Open Perspective::Other...b) 弹出一个 “Open Perspective” 对话框,选择 “SVN Repository Exploring” ,单击 OKc) 这是 eclipse 界面发生变化,在左边的 “ SVN Repositories” 面板上,右击鼠标选择 New::原创 2013-07-29 16:33:36 · 1352 阅读 · 0 评论 -
XMPP——Smack[5]文件传输及离线消息的获取
三天时间,赶在最后一下午实现了文件的传输,本来需要实现离线文件的发送的,一直没想好怎么弄,找openfire的离线文件插件没找到,后来想出一种方法,起服务器时起了一个系统用户,一直在线,当用户发送离线文件,检测到对方不存在,先发给系统用户,存到服务器路径,并在数据库中保存信息,当对方上线时,系统用户查表,拿文件发送想是这么想的,问题是时间太紧,没有实现,囧。下一篇写离线消息和离线文转载 2013-07-26 10:26:03 · 1302 阅读 · 0 评论