5

我们正在尝试为我们的产品实施XMPPover BOSHStrophe.jsjavascript 库可以很好地满足我们在 WWW 站点上的需求。我们请求预绑定,它已交付,然后我们使用 Strophe 的“附加”方法开始我们的会话 - 然后我们能够更新状态和发送/接收消息。在 iOS 方面,我们使用的是 robbiehanson XMPPFramework,它包含一个 BOSH 传输,但没有附加方法。以下是我试图让它发挥作用的一些悲伤。

我预先绑定,获取我的 sid/jid/rid,然后在 bosh 传输和其他文件中设置内部逻辑,以说明我们已经连接。然后,如果我尝试更新状态,包括给定的 SID,我会发送:

BOSH:发送[1248340729] = <body xmlns="http://jabber.org/protocol/httpbind" sid="568a3ae9" ack="1248340728" rid="1248340729"><presence></presence></body >

但根本没有得到任何答复。这是最后一个。如果我尝试在不指定 SID 的情况下更新状态,我会发送:

BOSH:SEND[1064338700] = <body xmlns="http://jabber.org/protocol/httpbind" ack="1064338699" rid="1064338700"><presence></presence></body>

然后回来:

BOSH:RECD[1342811427] = < body xmlns="http://jabber.org/protocol/httpbind" xmlns:stream="http://etherx.jabber.org/streams" authid="9ef0ccdb" sid="9ef0ccdb "secure="true" requests="2" inactivity="300" polling="5" wait="60"><stream:features><mechanisms xmlns="urn:ietf:params:xml:ns:xmpp-sasl "><机制>PLAIN</mechanism></mechanisms><压缩xmlns="http://jabber.org/features/compress"><method>zlib</method></compression><bind xmlns="urn :ietf:params:xml:ns:xmpp-bind"/>< session xmlns="urn:ietf:params:xml:ns:xmpp-session"/></stream:features></body>

这看起来像是一个连接确认,或者一个连接挑战节,希望我用 PLAIN 信息做出回应——但这已经通过预绑定建立了。如果是连接确认,那么接下来的几行就没有意义了。如果使用上面连接字符串提供的 SID,就好像它是一个肯定(我不确定),这些是下一行:

BOSH: SEND[1342811427] = <body xmlns="http://jabber.org/protocol/httpbind" sid="9ef0ccdb" rid="1342811428"><iq type="set"><bind xmlns="urn: ietf:params:xml:ns:xmpp-bind"><resource>api</resource></bind></iq></body>

BOSH:RECD[1342811427] = <body xmlns=' http: //jabber.org/protocol/httpbind '><iq xmlns="jabber:client" type="error" to="chat.*.com/9ef0ccdb" ><bind xmlns="urn:ietf:params:xml:ns:xmpp-bind"><resource>api</resource></bind><error code="401" type="auth"><未授权xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"/></error></iq></body>

我没有被授权。现在,如果我尝试使用在预绑定期间协商的 SID,最后两行是不同的:

BOSH: SEND[1172064714​​] = <body xmlns="http://jabber.org/protocol/httpbind" sid="27e3745b" rid="1172064715"><iq type="set"><resource>api</resource >< /bind></iq></body>

BOSH:RECD[1172064714​​] = <body xmlns="http://jabber.org/protocol/httpbind"></body>

一个空洞的回应。然后,如果我再次尝试更新我的状态,它会给我一个文字404页面,说明 SID 无效。当我使用 openfire 提供的 SID 时,如果我重新尝试状态更新,它只会继续给我401 not authorized.

任何帮助将不胜感激。

4

0 回答 0