使用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附带的文档非常糟糕。
任何人都有任何关于断开“正确方法”的线索吗?
答案 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
对象上使用它。