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.dispatcher.Dispatcherクラスにはdisconnect()メソッドがあります。メカニズムを介して動的にロードされるため、自動生成されたドキュメントからは明らかではありませんが、任意のオブジェクトPlugInで使用できます。CommentClient

于 2010-12-22T19:42:46.103 に答える
1

一般的に言えば、XMPP サーバーから切断したい場合は、次のように type='unavailable' の Presence スタンゼを送信します。

<presence type='unavailable' />

Presence には受信者アドレスがないことに注意してください。詳細を知りたい場合は、XMPP の RFC へのリンクを次に示します。(セクション 5.1.5)

その後、送信したプレゼンスは基本的にサーバーに「I'm out.」と通知するため、サーバーから正常に切断できます。

XMPPPY のドキュメントを確認したところ (はい、改善の余地があることに同意します)、xmpp.Client.Client に関数呼び出し sendPresence(...) が含まれているようです。機能を使用して不在プレゼンスを送信できる可能性がありますか?

API ドキュメントは次のとおりです: http://xmpppy.sourceforge.net/apidocs/xmpp.client.Client-class.html#sendPresence

于 2010-10-01T03:09:06.860 に答える