2013-04-18 4 views
1

Я пытаюсь использовать strophe + ejabberd, чтобы сделать что-то вроде webchat.Django + Strophe + ejabberd - неприятности с приложением и групповой фотографией

Что я сделал уже:

  • , когда я Войти на сайт, я также проверить подлинность ejabberd (для достижения RID и SID)
  • после регистрации закончена, я придаю RID и SID я получил от контекста процессора,
  • состояния соединения, кажется: соединение установлено, журналы:

.

POST: <body rid='406266360' xmlns='http://jabber.org/protocol/httpbind' sid='9c66aa19123e96dc2925c24d4f985d458763eb67'><presence xmlns='jabber:client'><priority>-1</priority></presence><presence to='localhost/m' xmlns='jabber:client'><x xmlns='http://jabber.org/protocol/muc'/></presence></body> 

RESP: <body xmlns='http://jabber.org/protocol/httpbind'><success xmlns='urn:ietf:params:xml:ns:xmpp-sasl'/></body> 

После этого соединение висит на:

POST: <body rid='406266361' xmlns='http://jabber.org/protocol/httpbind' sid='9c66aa19123e96dc2925c24d4f985d458763eb67'/> 

Когда я пытаюсь отправить сообщение прямо сейчас (в то время как его повесили):

POST: <body rid='406266362' xmlns='http://jabber.org/protocol/httpbind' sid='175e45333109f74c36f9dffbe4e3cc6cffc80df4'><message to='localhost' type='groupchat' xmlns='jabber:client'><body>yrdy</body></message></body> 

Im получение:

RESP: <body type='terminate' condition='remote-stream-error' xmlns='http://jabber.org/protocol/httpbind' xmlns:stream='http://etherx.jabber.org/streams'><stream:error><xml-not-well-formed xmlns='urn:ietf:params:xml:ns:xmpp-streams'/></stream:error></body> 

Что не так? Странно то, что после нескольких секунд запрос прерывается, а следующий запрос снова зависает. Когда я пытаюсь отправить сообщение, то нет никаких ошибок, но ответ:

RESP: <body xmlns='http://jabber.org/protocol/httpbind'/> 

При отсутствии ошибок (соединение все еще подключен и проверку подлинности, но сообщение не кажется, что будет доставлено).

код я использую, чтобы отправить сообщение:

var body = $('#input_text').val();               |  // make sure this presence is for the right room 
var msg_body = {                    |  if (room === Groupie.room) { 
    to: Chat.room,                  |   var nick = Strophe.getResourceFromJid(from); 
    type: 'groupchat'                   | 
}                        |   if ($(presence).attr('type') === 'error' && 
var msg = $msg(msg_body).c('body').t(body);             |    !Groupie.joined) { 
                           |    // error joining room; reset app 
Chat.connection.send(msg); 

ответ

0

Вы можете использовать Strophe.js прикрепить так:

Chat.connection = new Strophe.Connection(Chat.BOSH_SERVICE_URL); 
Chat.connection.attach(jid, sid, rid, onConnectHandler); 

onConnectHandler Затем вызывается, как только вы прикреплены успешно. С этого момента вам больше не придется беспокоиться о SID и RID (до перезагрузки страницы).

Также вы знаете о MUC strophe plugin?

Если вы хотите несколько примеров кода, чтобы использовать/исследование, я написал что-то подобное тому, что вы делаете для Plone, названный collective.xmpp.chat

Javascript является многоразовым отдельно: converse.js

+0

Его сделали по строфе. Я сделал именно то, что вы предложили в начале, после чего все обрабатывается Строфе (я имею в виду увеличение RID). Я думаю, что RID правильный. Я запустил ejabberd в режиме отладки, и я вижу, что сервер правильно получает сообщение (после этого сначала прерывается, а не раньше). Тем не менее, мой обработчик для общедоступного сообщения не выбрасывается (и никоим образом). Таким образом, текущий диагноз: Strophe отправляет сообщение (с этой небольшой проблемой с зависающим соединением), сообщение не получено Strophe. Спасибо за ссылки. Я посмотрю. – marxin

+0

AH я вижу, что означал иум. Его просто копия, вот почему RID отличается. – marxin