因项目需要,IM必须支持Socket,Http(s)-BOSH多种方式的连接,所以研究了一遍XIFF的代码,下载Sparkweb demo代码。接着,纠结的事来了:登录完成后,返回Error 404 Invalid SID 。反反复复研究了XMPPBOSHConnection.as,终于发现问题所在
OUTCOMING 出去@192.168.66.11,但INCOMING回来的<item jid=[email protected]> ,知道是域名搞的鬼,把openfire 的系统属性 xmpp.domain 改为域名,同时把服务器的安全证书删除(之前是以IP生成的)并重新生成,重启openfire,Sparkweb使用kssp.google.com连接,一切OK,Openfire的会话列表又可以看到用户在线了。
另外,不知XIFF的代码为什么没有把pauseSession 的定时器start,我改为在handleLogin 事件中 setTimeout(pauseSession ,5000,11),即5秒后,每11秒活动一次Session。
后话:
1)此时抛了一个异常 BindExtension.as 第67行 报 Unknown element: resource,再研究下,忽略掉。
2)进入用户搜索,抛异常 Error: BOSH Error - item-not-found,连接被terminal。
ps: 使用jwchat(一个急于Ajax的XMPP客户端,完全正常,无解)
另外要说明一点就是不能使用localhost作为 xmpp.domain,在windows上也BOSH没有连接成功,包括jwchat
在笔记本上调试了吧,问题来了,搞不懂。36:24.609 [INFO] INCOMING <body xmlns='http://jabber.org/protocol/httpbind'><iq xmlns="jabber:client" type="result" id="iq_7" from="huanghuorong@huanghr" to="huanghuorong@huanghr/sparkweb"><vCard xmlns="vcard-temp"/></iq></body>
20:36:24.625 [INFO] PollServer...
20:36:24.625 [INFO] Polling
20:36:24.625 [INFO] OUTGOING <body sid="f5171ed1" rid="506561" xmlns="http://jabber.org/protocol/httpbind" />
20:36:44.656 [INFO] INCOMING <body xmlns="http://jabber.org/protocol/httpbind"></body>
20:36:44.656 [INFO] OUTGOING <body sid="f5171ed1" rid="506562" xmlns="http://jabber.org/protocol/httpbind"><iq type="set" id="iq_13"><bind xmlns="urn:ietf:params:xml:ns:xmpp-bind"><resource>sparkweb</resource></bind></iq></body>
20:36:44.671 [INFO] INCOMING <body xmlns='http://jabber.org/protocol/httpbind'><stream:error xmlns:stream="http://etherx.jabber.org/streams"><conflict xmlns="urn:ietf:params:xml:ns:xmpp-streams"/></stream:error></body>
20:36:44.671 [INFO] PollServer...
20:36:44.671 [INFO] Polling
20:36:44.671 [INFO] OUTGOING <body sid="f5171ed1" rid="506563" xmlns="http://jabber.org/protocol/httpbind" />
20:36:44.703 [ERROR] Error: service-unavailable - Remote Server Error
20:36:44.718 [ERROR] Error: Unknown HTTP Error - Error #2032: Stream Error. URL: http://huanghr:7070/http-bind/