XMPP的一些工作(再续)

news/2024/11/7 20:06:42

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

    当出现问题的时候,能够从容淡定的去面对,去寻找解决方法。朝着这个方向继续的前进。

    问题描述:

    用smack 3.2.1 搭建了两个client。openfire做服务器。当一个client向另外一个client发送IQ包的时候,openfire会回503 service-unavaliable。

    打开openfire的源码: IQRouter.java 里面有一个函数叫handle(IQ packet)。在这个函数里面会判断packet的To address是否是local server。如果是的话就用这个packet里面的namespace去找到对应的IQHandler去处理。

    我发的IQ包就走到这个逻辑里面,因为我用的namespace是自定义的。所以在根据namespace去找IQHandler的时候就找不到,所以openfire就回复503。

    找到这个根源后,就开始分析原因。自定义的namespace应该不是问题。不能为每一个新的自定义的namespace去写一个IQHandler。根据一般的想法:openfire应该找到接受者的连接,然后在这个连接上把packet路由过去。

    所以问题就是为什么没有调用routintTable.routePacket()。 而是进入了local server的域中。

    原来To address是一个bare JID, 接收者连接到server的时候虽然没有指定resource。但是smack会缺省指定一个resource:Smack。 所以真正的To address应该是: name@domain/Smack. 发送者应该把这个full JID 作为To address。

   在接收者一侧的代码也需要做一点点改动。目的就是为了解析新的namespace。

   简单的做可以加一行代码:

   ProviderManager.getInstance().addIQProvider(YOUR_ELEMENT,YOUR_NAMESPACE, new YourIQProvider());

   当然需要实现YourIQProvider(). 它实现了IQProvider。实现这个接口的方法去解析packet。

    今天就倒这里把。

转载于:https://my.oschina.net/u/145002/blog/35365


http://www.niftyadmin.cn/n/2219423.html

相关文章

apache负载均衡配置

pache版本需要2.0以上 第一步,打开apache的相关模块 修改APACHE 的配置文件httpd.conf 打开以下模块,将之前的#取消即可 LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_http_module modules/mod_proxy_http.so LoadModule proxy_bal…

【强大】MAC装WIN7 双系统实现WIN7下的多分区

创建安装win7、osx以及未来成为扩展区的3个主分区: 用OS X安装盘引导,进入安装界面后用磁盘工具分区,选择分3个区,第一个区装win7(未来的C盘,MC-FAT格式,命名win7),第二个…

精确字符串匹配(BM算法) [转]

http://www.cnblogs.com/longdouhzt/archive/2011/09/25/2190576.html

Ubuntu下J2EE环境配置

1. 安装 Ubuntu-server-10.04.1 1.1 安装 安装过程中,记下输入的用户名与密码。 1.2 设置IP 安装完成之后,设置 IP ,终端输入: sudo vi /etc/network/interfaces 替换成一下内容: auto lo iface lo inet …

RTP Stack Research

Items to research •Licensing •Is the license compatible with core Asterisk SCF? •Does the license require us to do things we may not want to do? •Community •Is the community active? •Are they continually adding new functionality and fixing bugs? …

为KVM客户机添加virsh console支持

为KVM客户机添加virsh console支持 在KVM中安装了一个RHEL6.1,启动virsh命令想通过console命令连接至客户机的终端,结果输入命令后终端卡在这个状态: virsh # console test Connected to domain test Escape character is ^] 敲任何键都没反应…

SIP Stack Research

Items to research Licensing Is the license compatible with core Asterisk SCF?Does the license require us to do things we may not want to do? Community Is the community active?Are they continually adding new functionality and fixing bugs?Can we get …

为陈天桥私有化盛大叫好

盛大网络(NASDAQ:SNDA)于11月22日晚间宣布,公司已经与Premium Lead Company Limited和New Era Investment Holding Ltd达成股权收购协议,私有化交易得到进一步落实。Premium Lead 是盛大网络董事长、CEO和总裁陈天桥、其妻子雒芊芊…