2015-09-05 6 views
1

Я пытаюсь запустить код THIS XMPP JS с помощью ejabberd на стороне сервера. Вот мой код подключения:ejabberd Не удалось подключиться XMPP, используя strophejs

$(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/ и [email protected] является админ пользователь.

Вот полный код:

<!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(); 
    } 
    }); 
}); 

Ouput является:

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'/> 
+0

Какую версию ejabberd-сервера вы используете? Кажется, у вас проблема с перекрестным доменом, но это автоматически обрабатывается в последних версиях, поэтому, я думаю, вы используете старую версию ejabberd. –

+0

Я использую 15.07 – manish

+0

Какой браузер вы используете? –

ответ

1

статус = 1 соединительное средство. В основном это означает, что сервер BOSH не может быть достигнут.

Введите http://localhost:5280/http-bind/ в Chrome, чтобы узнать, действительно ли вы можете добраться до сервера BOSH.

Если ваш сервер действительно пройдет на локальном хосте (ваш компьютер, на котором хранится 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. Они должны дать намек на то, что пойдет не так.

+0

Я обновил свой вопрос, который поможет вам, как я собираюсь. Я попробовал это в mozilla, и вывод похож на «Strophe». SENT: 'Когда я просматриваю' http: // localhost: 5280/http-bind/'it показать мне страницу, говорящую «ejabberd mod_http_bindAn реализация XMPP над BOSH (XEP-0206) Эта веб-страница только информативна. Для использования HTTP-Bind вам нужен Jabber/XMPP-клиент, который его поддерживает. ' – manish

+0

попробуйте использовать var BOSH_SERVICE = 'http: // localhost: 5280/http-bind' –