2015-02-17 2 views
0

Я реализовал OPENFIRE с XMPP + BOSH на моем веб-интерфейсе. Когда я отправляю сообщение, я проверяю, является ли соединение вживую или нет. Если он не является живым, я создаю новое соединение, а затем отправляю его.Сообщение о выпуске Strophe Message

Иногда бывает, что клиент отправляет сообщение, и он не доставляется на сервер (не напротив клиента). Так что для этого мне нужна сильная вещь, которая должна сообщить клиенту, что это сообщение не дошло до сервера, пожалуйста, отправьте еще раз.

try { // sleep(2000); 
 
    Gab.connection.send(message); > 
 
    **var request = $msg({ 
 
     to: jid, 
 
     "type": "get", 
 
     id: mid 
 
    }).c('get', { 
 
     'xmlns': Strophe.NS.DISCO_INFO, 
 
     'id': mid 
 
    });** 
 
    console.log(request); > 
 

 
} catch (err) { 
 
    alert("Internet Disconnected ! Click ok to Reconnect SEND"); 
 
    window.top.location.reload(1); 
 
}

В коде выше я называю сообщение Отправить() После этого я вызвать функцию, как указано в "XMPP: XEP-0184". Док. , но никакого ответа я не получил.

Заранее спасибо.

ответ

1

Не уверен, что такое «сильная вещь», но когда кто-то отключен в Strophe, вы должны получить ошибки из скрипта и обновить состояние соединения Strophe.Status. Strophe отправляет сообщение каждые 60 секунд (если не указано иное). В вашем коде кажется, что вы пытаетесь проверить поддержку.

Перед отправкой вам необходимо найти «Strophe.Status.CONNECTED» или «Strophe.Status.ATTACHED», если это вас беспокоит. Вы также можете написать обработчик для управления ошибками.

В XEP 0184, вы должны включать в себя:

<request xmlns='urn:xmpp:receipts'/>

Так что ваш тзд должен выглядеть (примечание, вы должны включать в себя идентификатор за XEP 0184):

$msg({ 
to: tojid, 
from: fromjid, 
type: "chat", 
id: "sometrackingid"}).c('body').t("bodytxt").up().c("request", { 
xmlns: "urn:xmpp:receipts"}); 

Вы тогда необходимо изменить обработчик сообщений или создать отдельный обработчик для управления квитанциями.

+0

Я всегда проверяю перед отправкой сообщения ниже условий. Gab.connection.connected == false || Gab.connection.authenticated == false Моя веб-страница не узнает о том, когда она потеряла соединение. Поэтому когда пользователь пытается отправить сообщение, я проверяю, есть ли соединение или нет. Иногда случается, что мое соединение затерялось, и сообщение отправлено успешно и никогда не доходит до сервера и конечного пользователя. В этом случае он не показал мне никаких ошибок или предупреждений. Моя политика Idle Connections для клиентов установлена ​​в 5 секунд. –

+0

Вот почему я пытаюсь выяснить, мое сообщение успешно отправлено на сервер или нет? –

+0

5 секунд - это очень короткий период ожидания. Это нормальная настройка сайта? Я запускаю сайт с тысячами подключенных пользователей с обычным таймаутом (60 секунд) и не имеет проблем с подключением. Думаю, вам нужно посмотреть, почему ваши связи так часто теряются. –

Смежные вопросы