如何断开我的XMPPPY客户端对象

时间:2010-09-30 23:34:49

标签: python xmpp xmpppy

使用XMPPPY连接到XMPP服务器很简单。

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 个答案:

答案 0 :(得分:0)

一般来说,如果您想断开与XMPP服务器的连接,您将发送一个type ='unavailable'的Presence stanze,如下所示:

<presence type='unavailable' />

请注意,Presence没有收件人地址。如果您想了解更多信息,请参阅XMPP的RFC link。 (第5.1.5节)

之后,您可以优雅地断开与服务器的连接,因为您发送的状态基本上告诉服务器“我出去了。”。

我看了一下XMPPPY文档(是的,我同意它有改进的余地),似乎xmpp.Client.Client包含一个函数调用sendPresence(...)。您可以使用该功能发送不可用的状态?

以下是API文档:http://xmpppy.sourceforge.net/apidocs/xmpp.client.Client-class.html#sendPresence

答案 1 :(得分:0)

xmpp.dispatcher.Dispatcher类有disconnect()方法。自动生成的文档并不明显,因为它是通过PlugIn机制动态加载的,但您可以在任何CommentClient对象上使用它。