【问题标题】:Strophe Message Sent Acknowledgment IssueStrophe 消息发送确认问题
【发布时间】:2015-04-17 23:49:28
【问题描述】:

我已经在基于 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);
}

在上面的代码中,我调用消息发送()。之后,我调用“XMPP:xep-0184”文档中提到的函数。 但我没有收到任何回复。

提前谢谢你。

【问题讨论】:

    标签: javascript xmpp openfire strophe


    【解决方案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"});
    

    然后您需要修改您的消息处理程序或创建一个单独的处理程序来管理收据。

    【讨论】:

    • 我总是在发送消息之前检查以下条件。 Gab.connection.connected==false || Gab.connection.authenticated==false 我的网页不知道何时失去连接。因此,当用户尝试发送消息时,我会检查连接是否存在。有时会发生我的连接丢失并且消息发送成功并且从未到达服务器和最终用户的情况。在这种情况下,它没有向我显示任何错误或警告。我的客户端空闲连接策略设置为 5 秒。
    • 这就是为什么我想弄清楚我的消息是否成功发送到服务器??
    • 5 秒是一个极短的超时时间。这是通过正常的网站设置吗?我正在运行一个拥有一千个连接用户的站点,正常超时(60 秒)并且没有任何连接问题。我认为您需要仔细研究一下为什么您的连接如此频繁地丢失。
    • 我发现新问题是,当我刷新页面并在我的 openfire 面板中获得双会话时。刷新次数 * 用户数 = 列表中的会话列表。
    • 存储 rid 和 sid 并检测它们是否存在,然后在刷新/更改页面(如果存在)时使用 attach 代替。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-13
    • 2010-10-16
    • 2021-06-05
    相关资源
    最近更新 更多