首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何断开XMPPPY客户端对象的连接

如何断开XMPPPY客户端对象的连接
EN

Stack Overflow用户
提问于 2010-10-01 07:34:49
回答 2查看 2.2K关注 0票数 3

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

代码语言:javascript
复制
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清理对象吗?

代码语言:javascript
复制
self.xmppClient = None

我在客户端看到了“断开连接的处理程序”,但我不知道如何调用它们。而且XMPPPY附带的文档也很糟糕。

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

EN

回答 2

Stack Overflow用户

发布于 2010-10-01 11:09:07

一般来说,如果您想断开与XMPP服务器的连接,您将发送一个带有type='unavailable‘的在线状态消息,如下所示:

代码语言:javascript
复制
<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

票数 1
EN

Stack Overflow用户

发布于 2010-12-23 03:42:46

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3835548

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档