3

使用 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 附带的文档很糟糕。

有人知道断开连接的“正确方法”吗?

4

2 回答 2

1

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

<presence type='unavailable' />

请注意,Presence 没有收件人地址。如果您想了解更多信息,这里是 XMPP 的 RFC 的链接。(第 5.1.5 节)

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

我查看了 XMPPPY 文档(是的,我同意它还有改进的空间),似乎 xmpp.Client.Client 包含一个函数调用 sendPresence(...)。您也许可以使用该功能发送不可用的出席信息?

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

于 2010-10-01T03:09:06.860 回答
1

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

于 2010-12-22T19:42:46.103 回答