我已在基于Web的客户端界面上使用XMPP + BOSH实现了OPENFIRE。 当我发送消息时,我检查连接是否有效。如果它不是,我创建新连接然后发送。
有时会发生客户端发送消息并且未将消息传递到服务器(而不是客户端)。 因此,我需要一个强大的东西,应通知客户端此消息未到达服务器,请再次发送。
try { // sleep(2000);
Gab.connection.send(message); >
**var request = $msg({
to: jid,
"type": "get",
id: mid
}).c('get', {
'xmlns': Strophe.NS.DISCO_INFO,
'id': mid
});**
console.log(request); >
} catch (err) {
alert("Internet Disconnected ! Click ok to Reconnect SEND");
window.top.location.reload(1);
}
在上面的代码中,我调用了消息send()。然后我调用了“XMPP:xep-0184”doc中提到的函数。 但我收到的回复没有。
提前谢谢。
答案 0 :(得分:1)
不确定是什么"强大的东西"是的,但是当某人在Strophe中断开连接时,你应该从脚本中获取错误并且它将更新Strophe.Status连接状态。 Strophe每隔60秒发一个帖子(除非另有说明)。在您的代码中,您似乎正在尝试检查支持。
你应该寻找" Strophe.Status.CONNECTED"或者" Strophe.Status.ATTACHED"在发送之前,如果你担心的话。您还可以编写处理程序来管理错误。
在XEP 0184中,您必须包括:
<request xmlns='urn:xmpp:receipts'/>
所以你的msg应该是这样的(注意,你必须在每个XEP 0184中包含一个id):
$msg({
to: tojid,
from: fromjid,
type: "chat",
id: "sometrackingid"}).c('body').t("bodytxt").up().c("request", {
xmlns: "urn:xmpp:receipts"});
然后,您需要修改消息处理程序或创建单独的处理程序来管理收据。