使用Strophe无法附加到BOSH会话

时间:2011-08-10 11:56:56

标签: javascript xmpp openfire strophe bosh

我正在客户端使用XMPP而不是BOSH和Strophe实现实时通知系统,但我遇到了一些问题。当我登录我的网站时,我在后端建立了一个BOSH连接,并将JID,SID和RID保存为cookie。重新加载页面时,我从cookie中获取数据并使用Strophe的附加功能附加到该会话。我得到一个回调状态,说我已被附加。

我面临的第一个问题是请求每隔一秒左右发送一次。 这些是请求标头:

  

请求URL:http:// localhost:7070 / http-bind /
  请求方法:POST
  状态代码:200 OK

     

请求标题
  接受:* / *
  接收字符集:UTF-8,*; Q = 0.5
  接受编码:gzip,紧缩,SDCH
  接受语言:SV-SE,SV; Q = 0.8,EN-US; Q = 0.6,连接; Q = 0.4
  缓存控制:最大年龄= 0
  连接:保持活跃
  内容长度:77
  饼干:JSESSIONID = ibxwvm3ophp8; jiveforums.admin.logviewer = “debug.size = 0&安培; info.size = 0&安培; warn.size = 0&安培; error.size = 0”
  主持人:本地主机:7070
  起源:HTTP:// * **
  引用者:HTTP:// * ** /flXHR/flXHR.swf
  用户代理:Mozilla / 5.0(Macintosh; Intel Mac OS X 10_6_7)AppleWebKit / 535.1(KHTML,与Gecko一样)Chrome / 13.0.782.107 Safari / 535.1   content-type:application / x-www-form-urlencoded

     

表单数据
  <尸体摆脱:'3007'xmlns

     

回复标题
  内容长度:57
  内容类型:文本/ XML;字符集= UTF-8
  服务器:码头(7.0.2-SNAPSHOT)

我看不到任何回复内容,所以我不确定是什么导致它。发送的表单数据看起来像无效和不完整的XML,这是导致它的原因还是Chrome在调试器中如何格式化它?

我面临的另一个问题是我重新加载页面。我已经将一个卸载事件绑定到window对象,在该对象中我将RID增加1并将其保存到cookie中。但是,当重新加载页面时,它表示我已连接到BOSH会话,但后来收到以下错误消息:

  

POST http://localhost:7070/http-bind/ 404 (Not Found) (localhost)

     

Uncaught Error: 16, ioError, An error occured preventing completion of the request. (flensed.js)

下一个请求将抛出404(无效SID。)而不是404(未找到)并且每70秒左右重复一次。

是否有其他人遇到此问题并知道如何解决?我很沮丧!

提前致谢,
皮尔

1 个答案:

答案 0 :(得分:1)

虽然您已经放弃了实现,但您提到的第一个问题仍然是客户端服务器在Openfire连接中执行的连续ping操作,以便服务器知道客户端已启动并正在运行。第二个错误,不完全确定,但可能是因为您正在中断它们之间的通信而不是优雅地终止它。这可能导致strophe客户端再次遇到绑定到端口的一些问题。由于上面提到的ping机制,您也会反复面对问题。在触发window.onbeforeunload事件后,您可以尝试调用connection.disconnect方法。这将确保优雅的终止,从而确保正确的重新连接。