xmppメッセージを送信するアプリケーションがあります。それらの機会はまれである(時には何日もない)が、再び多分入ってくるかもしれない。私は何も受け取っていないので、送るだけです。単純なアプローチでは、検出されないタイムアウトが発生します。最後のsend()
は発生しません(レシーバは何も取得しません)。問題を報告せずに戻ります(すべて正常に動作したかのように単純なIDを返します)。 次にsend()
を呼び出すとが呼び出され、IOError( 'サーバーから切断されました')が発生します。python-xmppタイムアウトを検出する
メッセージごとに一定の切断/再接続を行うことができますが、これはしばしば切断されて再接続されることがあるため、このようには気に入らない場合があります。
ここで答えはthis questionにありますが、実際にはXMPPの返信を受け取る必要はありません。
質問:前か(うまく働いた場合のすべてに受信機をスパムう)第2のメッセージを送信しようとせずに送信した後、接続タイムアウトを検出への簡単な方法はありますか?
マイストレートフォワード・アプローチ:
import xmpp
def connectXmppClient(fromJidName, password):
fromJid = xmpp.protocol.JID(fromJidName)
xmppClient = xmpp.Client(fromJid.getDomain(), debug=[])
connection = xmppClient.connect()
if not connection:
raise Exception("could not setup connection", fromJid)
authentication = xmppClient.auth(
fromJid.getNode(), password, resource=fromJid.getResource())
if not authentication:
raise Exception("could not authenticate")
return xmppClient
def sendXmppMessage(xmppClient, toJidName, text):
return xmppClient.send(xmpp.protocol.Message(toJidName, text))
if __name__ == '__main__':
import sys, os, time, getpass
if len(sys.argv) < 2:
print "Syntax: xsend fromJID toJID"
sys.exit(0)
fromJidName = sys.argv[1]
toJidName = sys.argv[2]
password = getpass.getpass()
xmppClient = connectXmppClient(fromJidName, password)
while True:
line = sys.stdin.readline()
if not line:
break
print xmppClient.isConnected()
id = sendXmppMessage(xmppClient, toJidName, line)
print id
'xmppClient.send'を' try:catch: 'に入れてみませんか?あなたは例外のタイプをチェックすることができます。 'IOError'の場合は、再度' connectXmppClient'を呼び出してください。 –
私はtry/catchを用意しています。しかし、私が書いたように、IOErrorは最初の呼び出しでは発生しません。次回(何時間後でも可能)だけが私が捕まえることができる例外をスローします。それは良いことではありません。私はむしろ(もちろん)最初のメッセージを送信する際に接続の内訳に気づきたいので、すぐに接続を再確立して最初のメッセージを送信し直すことができます。 – Alfe