使用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附带的文档也很糟糕。
有谁知道断开连接的“正确方法”吗?
发布于 2010-10-01 11:09:07
一般来说,如果您想断开与XMPP服务器的连接,您将发送一个带有type='unavailable‘的在线状态消息,如下所示:
<presence type='unavailable' />请注意,在线状态没有收件人地址。如果您想了解更多信息,这里有一个XMPP RFC的link。(第5.1.5节)
在此之后,您可以优雅地断开与服务器的连接,因为您发送的状态基本上会告诉服务器,“我退出了。”
我看了一下XMPPPY文档(是的,我同意它还有改进的空间),xmpp.Client.Client似乎包含一个调用sendPresence(...)的函数。您是否可以使用函数发送不可用的在线状态?
下面是应用程序接口文档:http://xmpppy.sourceforge.net/apidocs/xmpp.client.Client-class.html#sendPresence
发布于 2010-12-23 03:42:46
xmpp.dispatcher.Dispatcher类有一个disconnect()方法。这在自动生成的文档中并不明显,因为它是通过PlugIn机制动态加载的,但是您可以在任何CommentClient对象上使用它。
https://stackoverflow.com/questions/3835548
复制相似问题