无法通过WebSockets和strophe-openfire.js在Openfire上联机

时间:2013-07-31 11:28:13

标签: websocket xmpp openfire strophe

我正在尝试使用HTML5,WebSockets,strophe-openfire.js库(https://code.google.com/p/openfire-websockets/source/browse/trunk/src/ofchat/js/strophejs/src/strophe-openfire.js)和Openfire服务器进行实时聊天。
我使用此代码段进行连接:

function connectHandler(cond) {  
    log("connected");  
    connection.send($pres());  
}

var url = "ws://localhost:7070/ws";    
connectButton.onclick = function() {  
   var username = document.getElementById("username").value;  
   var password = document.getElementById("password").value;  
    var connection = new Openfire.Connection (url);  
   connection.connect(username, password,  connectHandler);  
}

我在“客户端会话”选项卡中的Openfire管理控制台上看到用户“已验证”但仍处于“脱机”状态。在Chrome控制台上,我看到来自Openfire的响应 101切换协议和相应的标题,但仅此而已。

所以我的问题是connection.send($pres())无效的原因以及如何向Openfire发送状态。

提前谢谢。
安德鲁

1 个答案:

答案 0 :(得分:0)

抱歉,我无法回答,但我遇到了同样的问题。我的Openfire服务器建立websocket连接,但从不返回响应:

<?xml version='1.0'?><stream:stream to='satellite-l675' xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams' version='1.0' xml:lang='en' xmlns:xml="http://www.w3.org/XML/1998/namespace">

我正在使用带有.0006 websocktet插件的Openfire 3.8.2。我正在尝试使用Candy聊天作为客户端。

我偶然做到了通过绕过身份验证并发送它来与Openfire websocket进行通信:

发送: <stream:stream to='satellite-l675' xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams' version='1.0'/>

发送: <presence xmlns='jabber:client'/>

发送: <iq type='get' from='@satellite-l675/Candy' to='welcome@conference.satellite-l675' id='disco3' xmlns='jabber:client'> <query xmlns='http://jabber.org/protocol/disco#info'/> </iq>

发送: <presence from='satellite-l675/Candy' to='welcome@conference.satellite-l675/yogi' xmlns='jabber:client'> <x xmlns='http://jabber.org/protocol/muc'/> </presence>

发送: <iq type='get' from='@satellite-l675/Candy' id='get1' xmlns='jabber:client'> <query xmlns='jabber:iq:privacy'> <list name='ignore'/> </query> </iq>

RECV: <body rid='3282533506' xmlns='http://jabber.org/protocol/httpbind'> <presence xmlns='jabber:client' from='welcome@conference.satellite-l675/yogi' to='msos_ws_candy@satellite-l675/MSOS_ws_Candy'> <x xmlns='http://jabber.org/protocol/muc#user'> <item affiliation='none' role='participant'/> </x> </presence> </body>

所以websocket有效,但不容易理解为什么以及如何。有趣的是,Openfire附带的SparkWeb演示工作正常,但只发送<iq>。它似乎甚至不会打扰<stream:...this...><stream:...that...>

因此,鉴于文档有限,我只能得出结论,Openfire Websockets只使用<iq>,而我唯一成功的沟通是由<iq>发送请求迪斯科#info。

那么我们如何发送身份验证请求?任何对优秀示例或文档的引用都将不胜感激。