Как отключить мой клиентский объект XMPPPY - PullRequest
3 голосов
/ 01 октября 2010

Простое подключение к серверу XMPP с XMPPPY.

from xmpp.client import Client as XMPPClient

self.xmppClient = XMPPClient("jabber.foo.com")
if not self.xmppClient.connect(server="localhost"):
    raise IOError('Cannot connect to server.')
if not self.xmppClient.auth("node", "password", "resource"):
    raise IOError('Can not auth with server.')
    self.xmppClient.RegisterHandler("message", self.messageHandler)
self.xmppClient.sendInitPresence()

Однако бывают случаи, когда моему клиенту приходится принудительно отключаться, но он все равно продолжает заниматься другими делами. Я хотел бы убедиться, что клиент правильно отключается - сокет не «зависает» и ресурсы сервера не расходуются.

Является ли предполагаемый шаблон просто установить для клиента значение None и позволить GC очистить объект?

self.xmppClient = None

Я вижу "отключенные обработчики" в клиенте, но не вижу, как их вызывать. И документация, которая идет с XMPPPY, ужасна.

Кто-нибудь имеет хоть какой-то ключ к «правильному пути» отключения?

Ответы [ 2 ]

1 голос
/ 22 декабря 2010

Класс xmpp.dispatcher.Dispatcher имеет метод disconnect(). Это не очевидно из автоматически сгенерированной документации, поскольку она загружается динамически через механизм PlugIn, но вы можете использовать ее для любого объекта CommentClient.

1 голос
/ 01 октября 2010

Вообще говоря, если вы хотите отключиться от сервера XMPP, вы отправите раздел присутствия с type = 'unavailable', как показано ниже:

<presence type='unavailable' />

Обратите внимание, что присутствие не имеетадрес получателя.Вот ссылка на RFC XMPP на случай, если вы хотите узнать больше.(Раздел 5.1.5)

После этого вы можете изящно отключиться от сервера, так как отправленное вами сообщение в основном говорит серверу: «Я отсутствует».

Я взялпосмотрите на документацию XMPPPY (да, я согласен, что у нее есть возможности для улучшения), и кажется, что xmpp.Client.Client содержит вызов функции sendPresence (...).Возможно, вы сможете отправить недоступное присутствие с помощью функции?

Вот документация по API: http://xmpppy.sourceforge.net/apidocs/xmpp.client.Client-class.html#sendPresence

...