我正在开发一个需要包含会话附件的XMPP Web应用程序。我正在使用Openfire XMPP服务器。我已成功实现了创建会话的服务器端附件,并获得了sid并删除了会话。不幸的是,我被困在下一部分。
据我所知,在获取sid和rid之后,我需要使用Strophe.Connection.attach()将strphe附加到现有会话。之后,我正在发出一个IQ请求,从服务器获取正确的响应。但是,我没有对状态进行任何更改,即应用程序既没有连接也没有连接,因此我无法做任何事情。 在IQ请求之后,服务器使用正常消息按时响应,然后在下一个请求中,我得到403禁止错误并且连接终止。
以下是代码:
var BOSH_SERVICE = 'http://localhost/cosys-rtw/';
var connection = null;
var sid = "";
var rid = 0;
function notifyUser(msg)
{
if (msg.getAttribute('from') == "testuser1@ghost/pingstream") {
var elems = msg.getElementsByTagName('body');
var body = elems[0];
$('#notifications').append(Strophe.getText(body));
}
return true;
}
function onConnect(status)
{
console.log("Connect")
console.log(status)
if (status == Strophe.Status.ATTACHED) {
$('#notifications').html('<p class="welcome">Hello! Any new posts will appear below.</p>');
connection.addHandler(notifyUser, null, 'message', null, null, null);
connection.send($pres().tree());
}
}
$(document).ready(function () {
$.ajax({'url':'http://localhost/x',
'method':'get',
'success':function(response){
console.log(response);
console.log(jQuery.parseJSON(response));
resp = jQuery.parseJSON(response);
window.sid = resp.sid;
window.rid = resp.rid;
prepareStrophe();
}});
});
function prepareStrophe(){
console.log(BOSH_SERVICE);
jid = "testuser1@ghost";
connection = new Strophe.Connection(BOSH_SERVICE);
console.log(window.rid);
console.log(window.sid);
connection.attach( jid,window.sid,window.rid,null);
connection.sendIQ( $iq({to:Strophe.getDomainFromJid(jid),type:"get"})
.c('query',{xmlns:'http://jabber.org/protocol/disco#info'}),
function(){
if (status == Strophe.Status.ATTACHED) {
connection.send($pres().tree());}
});}
我得到了对IQ请求的以下回应:
<body xmlns="http://jabber.org/protocol/httpbind">
<iq id="6173:sendIQ" xmlns="jabber:client" type="result" from="ghost" to="testuser1@ghost/6b8bfe07">
<query xmlns="http://jabber.org/protocol/disco#info">
<identity category="server" name="Openfire Server" type="im"></identity>
<identity category="pubsub" type="pep"></identity>
<feature var="http://jabber.org/protocol/pubsub#delete-nodes"></feature>
.
.
.
<feature var="http://jabber.org/protocol/pubsub#purge-nodes"></feature>
<feature var="http://jabber.org/protocol/disco#info"></feature>
<feature var="http://jabber.org/protocol/rsm"></feature>
</query>
</iq>
</body>
此回复确实表明会话有效。我对吗? 我无法理解这件事,所以现在我把它交给社区。 顺便说一句 - 圣诞快乐
答案 0 :(得分:1)
我认为如果有人遇到同样的问题我在这里有一些我想分享的内容。这个线程点燃实时http://community.igniterealtime.org/thread/33004讨论了这个问题。那里提到的设置对我有用。