Диспетчер подключений XMPP "Strophe.Connection" возвращает статус ATTACHED вместо CONNECTED - PullRequest
0 голосов
/ 26 февраля 2012

Я использую Strophe.Connection для создания и инициализации объекта Strophe.Connection, и я запускаю процесс соединения с функцией 'connect', но он возвращает состояние ATTACHED вместо CONNECTED, как и ожидалось в книге.

Этот код взят из «Профессионального XMPP-программирования Джека Моффита с использованием JavaScript и JQuery», но он не работает для меня :-(

Я прошел весь день, и у меня сильно болит голова. Любая помощь будет признательна. Спасибо,

Вот код:

$(document).bind('connect', function (ev, data) {
    var conn = new Strophe.Connection(
        "http://localhost:5280/xmpp-httpbind");
    conn.connect(data.jid, data.password, function (status) {
        if (status === Strophe.Status.CONNECTED) {
            $(document).trigger('connected');
        } else if (status === Strophe.Status.DISCONNECTED) {
            $(document).trigger('disconnected');
        } 
    });

Чтобы понять, что происходит, я изменил код следующим образом (со статусом подключения):

$(document).bind('connect', function (ev, data) {
    var conn = new Strophe.Connection(
        "http://localhost:5280/xmpp-httpbind");
    conn.connect(data.jid, data.password, function (status) {
        if (status === Strophe.Status.CONNECTED) {
            $(document).trigger('connected');
        } else if (status === Strophe.Status.DISCONNECTED) {
            $(document).trigger('disconnected');
        } else if (status === Strophe.Status.ERROR) {
            alert ('status ERROR');
        } else if (status === Strophe.Status.CONNECTING) {
            alert ('status CONNECTING');
        } else if (status === Strophe.Status.CONNFAIL) {
            alert ('status CONNFAIL');
        } else if (status === Strophe.Status.AUTHENTICATING) {
            alert ('status AUTHENTICATING');
        } else if (status === Strophe.Status.AUTHFAIL) {
            alert ('status AUTHFAIL');
        } else if (status === Strophe.Status.ATTACHED);
            alert ('status ATTACHED');

Это показывает мне два состояния: СОЕДИНЯЕТСЯ, затем ПОДКЛЮЧЕНО. Почему у меня не может быть СОЕДИНЕННЫЙ статус, как и ожидалось в книге ???

Ответы [ 3 ]

0 голосов
/ 27 февраля 2012

Мне удается заставить Strophe работать с моим сервером Openfire, добавив новое правило в .htaccess, которое перенаправит запрос на http-bind.

RewriteRule http-bind/ http://www.mydomain.info:7070/http-bind/ [P]

Код JS:

var DEV = {};
var jq  = jQuery;
DEV.APP = {};
var BOSH_SERVICE = 'http://www.mydomain.info/http-bind/';
var connection = null;

function log(msg) 
{
    jq('body').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.');
    } else if (status == Strophe.Status.DISCONNECTING) {
        log('Strophe is disconnecting.');
    } else if (status == Strophe.Status.DISCONNECTED) {
        log('Strophe is disconnected.');
    } else if (status == Strophe.Status.CONNECTED) {
        log('Strophe is connected.');
        // connection.disconnect();
    }
}

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

    connection.connect("username", "password", onConnect);
});

Как примечание, междоменная политика, если она применяется, даже если вы пытаетесь получить доступ к ресурсу, который находится на том же домене, но на другом порту.

Надеюсь, это поможет.

Редактировать:Мой .htaccess выглядит так:

Options +FollowSymLinks
RewriteEngine On

RewriteBase /

RewriteRule http-bind/ http://www.domain.info:7070/http-bind/ [P]
0 голосов
/ 13 апреля 2012

Я иду по предложению "метаджека". Я никогда не использовал сетевую панель Chrome, но в Firefox Firebug мне показался очень удобным. После того, как вы установили firebug, все, что вам нужно сделать, это «включить все панели». На вкладке «Сеть» у вас есть все запросы, которые вы отправляете и получаете В разделе «Сеть» вкладка «Все» - это, по сути, место, где firebug отображает все сетевые активности. Теперь где-то внизу вашего списка вы сможете увидеть ваши запросы http-bind (на моем ноутбуке у меня установлена ​​BOSH на Apache, а прокси-сервер установлен как «http-bind»; точный адрес зависит от ваших настроек) , Разверните узел http-bind и выберите вкладку «Опубликовать». Там вы сможете увидеть ваш запрос HTTP Post. Теперь, если вы нажмете «Ответ», он покажет вам ответ, полученный от вашего сервера XMPP. Здесь - учебное пособие самого создателя огненной ошибки.

0 голосов
/ 26 февраля 2012

Для диагностики требуется дополнительная информация.Вы можете попробовать запустить Firefox или Chrome и просмотреть сетевую панель в инструментах разработчика, чтобы увидеть, какая ошибка на самом деле происходит.

Я полагаю, что это просто проблема междоменного запроса.

...