【问题标题】:Strophe Ping Plugin Not respondingStrophe Ping 插件没有响应
【发布时间】:2015-08-25 08:57:47
【问题描述】:

我正在尝试添加 Strophe ping 插件以 ping 另一个用户并以 pong 响应,然后我知道该用户已连接。

但我不知道如何让它工作。

我在文档中阅读了一个示例,但它对我不起作用。

我只是想得到某种形式的回电,说对方已连接。

   conn.addHandler(pingHandler, "urn:xmpp:ping", "iq", "get");


 function pingHandler(ping) {
 var pingId = ping.getAttribute("1");
 var from = ping.getAttribute("from");
 var to = ping.getAttribute("to");
 var pong = $iq({type: "result", "to": from, id: pingId, "from": to});
 conn.send(pong);
  return true;
}    

我也试过下面的方法,下面的方法会发出Ping并称它发送成功,但是pingHandler中没有响应。似乎已发送,但未收听/处理。

  conn.ping.addPingHandler( pingHandler );  

 function Onping(){


    var jid3="test4@macbook-pro.local"


     console.log("ping starts");
conn.ping.ping( jid3, success, error, timeout );


     function success(){
     console.log("ping sent");

     }
       function error(){
     console.log("ping Not sent");

     }
       function timeout(){
     console.log("ping Timeout");

     }





 }


            function pingHandler(ping) {
                  console.log("pong back");
     var pingId = ping.getAttribute("id");
     var from =  ping.getAttribute("from");
     var to = ping.getAttribute("to");
     var pong = $iq({type: "result", "to": from, id: pingId, "from": to});
     conn.send(pong);
      return true;
    } 

编辑

SENT: <body rid='4132220829' xmlns='http://jabber.org/protocol/httpbind' sid='a7411f98'><iq type='get' to='test4sdfsdfs@macbook-pro.local' id='1:ping' xmlns='jabber:client'><ping xmlns='urn:xmpp:ping'/></iq></body>

RECV: <body xmlns='http://jabber.org/protocol/httpbind' ack='4132220829'/>

RECV: <body xmlns='http://jabber.org/protocol/httpbind' ack='4132220829'><iq xmlns='jabber:client' type='result' id='1:ping' from='test4sdfsdfs@macbook-pro.local' to='test3@macbook-pro.local/a7411f98'/></body>

【问题讨论】:

    标签: openfire strophe


    【解决方案1】:

    您需要在连接时附加一个发送 pong 的 ping 侦听器/处理程序。您的听众会响应发送给您的任何 ping。您的 ping 发送者设置了一个处理程序来处理 pong。

    var onConn = function(){
        conn.ping.addPingHandler(onPing);
    };
    
    var onPing = function (iq) {
        conn.ping.pong(iq);
        return true;
    };
    
    var onPong = function(iq){
        //do whatever with response
        return false;
    };
    
    var sendPing = function(jid){
        conn.ping.ping(
            jid,
            function (iq) {onPong(iq);},
            function () { console.log('Failed!'); }, 
            3000);
    };
    
    sendPing('foo@jabberservername.com');
    

    【讨论】:

    • 嗨,马克,我试过了,但似乎我什至一开始都没有收到 ping,因为我在我正在尝试的用户帐户中的控制台登录中没有看到 pong ping。
    • 我已经用一个完整的例子更新了答案。确保在连接时添加处理程序。还要检查以确保您的服务器配置为使用 ping。
    • 将 xmpp.client.idle.ping 设置为 true 对吗?我的设置为 true,我对其进行了测试,但它似乎没有恢复乒乓球……它甚至似乎一开始都没有收到 ping……我添加了一个 console.log 和 RawInput/Ouput,当 ping 应该通过时,什么也没有。我想知道它是否与我的openfire有关。在我将空闲断开连接设置为时,我的连接也没有断开。
    • 我不明白如何阅读 RawOutput 我把它们放在我的问题的编辑中。不知道为什么我有一个用于 ping 的 RECV,但是当我 ping 到一个不存在的帐户时。我不是在尝试 ping 服务器,而是在尝试 ping 特定客户端(用户)以查看是否已连接。
    • 在您上面添加的编辑中,响应看起来正确。您编辑中的 SENT 是您的 ping 输出,最后一个 RECV 是返回给您的 pong。往返是'test4sdfsdfs@macbook-pro.local',乒乓球是给你的。至于空闲,我什么都不做。我会添加你的 sid 看起来非常可疑,我的看起来像 md5 哈希或类似的。
    猜你喜欢
    • 2022-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多