ejabberd XMPP връзката е неуспешна при използване на strophejs

Опитвам се да стартирам ТОЗИ XMPP JS код, използвайки ejabberd от страната на сървъра. Ето моя код за връзка:

$(document).bind('connect', function (ev, data) {
    console.log("connect "+JSON.stringify(data));
    var conn = new Strophe.Connection("http://localhost:5280/http-bind");

    conn.connect(data.jid, data.password, function (status) {
        console.log("status"+status);
        if (status === Strophe.Status.CONNECTED) {
            $(document).trigger('connected');
        } else if (status === Strophe.Status.DISCONNECTED) {
            $(document).trigger('disconnected');
        }
    });

    Hello.connection = conn;
});

Получавам status = 1. и след няколко време започва да показва: Uncaught Error: 11, flXHR::abort(): Failed, The abort() call failed to complete.

Моят ejabberd работи на http://localhost:5280/admin/ и admin@ejab е администраторски потребител.

Ето пълния код:

<!DOCTYPE html>
<html>
  <head>
    <title>Strophe.js Basic Example</title>
    <script src='http://ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.min.js'></script>
    <script src='../strophe.js'></script>
<!--    <script src='scripts/flXHR.js'></script>
    <script src='scripts/strophe.flxhr.js'></script>-->
    <script src='basic.js'></script>
  </head>
  <body>
    <div id='login' style='text-align: center'>
      <form name='cred'>
        <label for='jid'>JID:</label>
        <input type='text' id='jid'>
        <label for='pass'>Password:</label>
        <input type='password' id='pass'>
        <input type='button' id='connect' value='connect'>
      </form>
    </div>
    <hr>
    <div id='log'></div>
  </body>
</html>

basic.js

var BOSH_SERVICE = 'http://localhost:5222/http-bind';
var connection = null;

function log(msg) 
{
    $('#log').append('<div></div>').append(document.createTextNode(msg));
}

function rawInput(data)
{
    log('RECV: ' + data);
}

function rawOutput(data)
{
    log('SENT: ' + data);
}

function onConnect(status)
{
    if (status == Strophe.Status.CONNECTING) {
    log('Strophe is connecting.');
    } else if (status == Strophe.Status.CONNFAIL) {
    log('Strophe failed to connect.');
    $('#connect').get(0).value = 'connect';
    } else if (status == Strophe.Status.DISCONNECTING) {
    log('Strophe is disconnecting.');
    } else if (status == Strophe.Status.DISCONNECTED) {
    log('Strophe is disconnected.');
    $('#connect').get(0).value = 'connect';
    } else if (status == Strophe.Status.CONNECTED) {
    log('Strophe is connected.');
    connection.disconnect();
    }
}

$(document).ready(function () {
    connection = new Strophe.Connection(BOSH_SERVICE);
    connection.rawInput = rawInput;
    connection.rawOutput = rawOutput;

    $('#connect').bind('click', function () {
    var button = $('#connect').get(0);
    if (button.value == 'connect') {
        button.value = 'disconnect';

        connection.connect($('#jid').get(0).value,
                   $('#pass').get(0).value,
                   onConnect);
    } else {
        button.value = 'connect';
        connection.disconnect();
    }
    });
});

изходът е:

Strophe is connecting.
SENT: <body rid='745165534' xmlns='http://jabber.org/protocol/httpbind' to='ejab' xml:lang='en' wait='60' hold='1' content='text/xml; charset=utf-8' ver='1.6' xmpp:version='1.0' xmlns:xmpp='urn:xmpp:xbosh'/>

person Manish Kumar    schedule 05.09.2015    source източник
comment
Коя версия на сървъра ejabberd използвате? Изглежда, че имате проблем с кръстосани домейни, но това се обработва автоматично в най-новите версии, така че предполагам, че използвате стара версия на ejabberd.   -  person Mickaël Rémond    schedule 07.09.2015
comment
Кой браузър използвате?   -  person Mickaël Rémond    schedule 08.09.2015
comment
chrome версия 40.0.2214.91 (64-битова)   -  person Manish Kumar    schedule 08.09.2015


Отговори (1)


status = 1 означава свързване. Това най-вече означава, че BOSH сървърът не може да бъде достигнат.

Въведете http://localhost:5280/http-bind/ в Chrome, за да видите дали наистина можете достигнете до BOSH сървъра.

Ако вашият сървър наистина е хост на localhost (вашият компютър, където се съхранява hello.html), можете да коментирате flXHR.js и strophe.flxhr.js в заглавката на hello.html, тъй като те са за достъп между домейни.

напр. hello.html на вашия работен плот и използвате домейн (xmpp сървър), който хоства на друг компютър, който вече не е разрешен от Chrome поради сигурността на кръстосания домейн достъп.

Ако и hello.html, и xmpp сървърът се намират на един и същ компютър, той няма да има проблем с кръстосани домейни.

Както и да е, тези 2 файла изглежда не могат да преодолеят ограничението за достъп между домейни, зададено от браузъра Chrome преди няколко години. Използването на параметъра на Chrome „--disable-web-security“ може да осигури междудомейн достъп за тест.

И накрая, в браузъра Chrome щракнете с десния бутон, за да изберете „Инспектиране на елемент“ -> Мрежа, презаредете hello.html и влезте, за да проверите този http-bind достъп. Те трябва да подскажат какво се обърка.

person pny_hk    schedule 10.09.2015
comment
Актуализирах въпроса си, който ще ви помогне как вървя. Пробвах го в mozilla и изходът е като Strophe is connecting. SENT: <body rid='745165534' xmlns='http://jabber.org/protocol/httpbind' to='ejab' xml:lang='en' wait='60' hold='1' content='text/xml; charset=utf-8' ver='1.6' xmpp:version='1.0' xmlns:xmpp='urn:xmpp:xbosh'/> Когато разглеждам http://localhost:5280/http-bind/ ми показва страница с надпис ejabberd mod_http_bindAn implementation of XMPP over BOSH (XEP-0206)This web page is only informative. To use HTTP-Bind you need a Jabber/XMPP client that supports it. - person Manish Kumar; 10.09.2015