XMPP Web客户端(使用strophe.js)花时间连接ejabberd服务器

时间:2014-08-02 16:04:00

标签: javascript jquery xmpp strophe

我已经为JavaScript实现了一个XMPP客户端(使用strophe.js),我指的是Jack Moffitt所着的书籍 Professional XMPP with JavaScript and jQuery

本书对使用“strophe.js”工作XMPP JavaScript客户端做了很好的解释。

使用我的代码,XMPP Web客户端需要6秒钟来连接XMPP服务器(使用BOSH的ejabberd),这对我的应用程序来说是不可取的。

有人可以解释为什么会这样吗?

我的XMPP客户端代码如下:

var Arthur = {

    connection: null,
    jid:"20147001@localhost",
    password: "XXXX2014",
    handle_message: function (message) {
        if ($(message).attr('from')) {

            if($(message).attr('from').match(/^abcd007@localhost/)){
            console.log("inside message received");
            var body = $(message).find('body').contents();

            var span = $("<span></span>");
            body.each(function () {
            if (document.importNode) {
            $(document.importNode(this, true)).appendTo(span);
            console.log(span);
            console.log(span.text());
            }
            });
            notiReceived(span.text());
            console.log("afte notiReceived executed");
            }
            if($(message).attr('from').match(/^xyz2014@localhost/)){
                console.log("inside message received");
                var body1 = $(message).find('body').contents();
                var span1 = $("<span></span>");
                body1.each(function () {
                if (document.importNode) {
                $(document.importNode(this, true)).appendTo(span1);
                //console.log(span.find('text'));
                console.log(span1);
                console.log(span1.text());
                }
                });
                notiReceived(span1.text());
                console.log("afte notiReceived executed");
                }

            }
        return true;
    }
};

 function sendPushNotification(to,operation,request_id,message){

     if(to=="citizen"){
     var myObject = new Object();
     myObject.FROM="Executive";
     myObject.FUNCTION=operation;
     myObject.MESSAGE = message;
     myObject.REQUESTID= request_id;

   console.log("inside citizen::"+myObject);
   var myString = JSON.stringify(myObject);
   $(this).val('');
   var msg = $msg({to: 'abcd007@localhost', type: 'chat'})
       .c('body').t(myString);
   console.log("inside keypress data is::"+msg);

   Arthur.connection.send(msg);
    }
  if(to=="technician"){

      var myObject1 = new Object();
      myObject1.FROM="Executive";
         myObject1.FUNCTION=operation;
         myObject1.MESSAGE = "Check Request Status";
         myObject1.REQUESTID= request_id;

       console.log("inside technician:"+myObject1);
       var myString1 = JSON.stringify(myObject1);
       $(this).val('');
       var msg1 = $msg({to: 'xyz2014@localhost', type: 'chat'})
           .c('body').t(myString1);
       console.log("after msg send to technician"+msg1);

       Arthur.connection.send(msg1);  
  }
 };


 function connected() {
     console.log("inside connected");

    Arthur.connection.addHandler(Arthur.handle_message,
                                 null, "message", "chat");
    console.log("inside connected");
    Arthur.connection.send($pres());
};

 function disconnected() {
    console.log("disconnected");
    Arthur.connection = null;
};

function disconnect(){
    Arthur.connection.disconnect();
};

function connectXMPP() {
    var conn = new Strophe.Connection(
            hosturl.URL+":5280/http-bind");
    console.log("inside connection");
   conn.connect(Arthur.jid, Arthur.password, function (status) {
       if (status === Strophe.Status.CONNECTED) {
           connected();
           console.log("connected");
       } else if (status === Strophe.Status.DISCONNECTED) {
          disconnected();
       }
   });

   Arthur.connection = conn;
 };

1 个答案:

答案 0 :(得分:1)

我不知道这是否是这种情况,但通常在建立连接需要很长时间时,原因通常是主机名解析问题。 例如,如果主机同时具有IPv4和IPv6地址,但是没有IPv6连接但是首先尝试IPv6,那么在IPv6连接尝试超时之前可能会有延迟。

要检查域名解析是否是原因,您可能需要使用Wireshark等工具查看网络流量。