我正在尝试使用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发送状态。
答案 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。
那么我们如何发送身份验证请求?任何对优秀示例或文档的引用都将不胜感激。