2010-11-24 4 views
1

jabberメッセージを送信するためにpython-xmppを使用しています。メッセージが送信されるたびに(15分ごとに)、ジャバーサーバーに再接続する必要があり、その間に送信クライアントがオフラインでメッセージを受信できないことを除いて、すべて正常に機能します。Pythonで単純に連続して動作するXMPPクライアント

本当にシンプルで無期限に動作するxmppクライアントを作成したいと思います。これは、常にオンラインであり、必要なときにメッセージを送信(および受信)することができます。

私の些細な(非稼働)アプローチ:

import time 
import xmpp 

class Jabber(object): 
    def __init__(self): 
     server = 'example.com' 
     username = 'bot' 
     passwd = 'password' 
     self.client = xmpp.Client(server) 
     self.client.connect(server=(server, 5222)) 
     self.client.auth(username, passwd, 'bot') 
     self.client.sendInitPresence() 
     self.sleep() 

    def sleep(self): 
     self.awake = False 
     delay = 1 
     while not self.awake: 
      time.sleep(delay) 

    def wake(self): 
     self.awake = True 

    def auth(self, jid): 
     self.client.getRoster().Authorize(jid) 
     self.sleep() 

    def send(self, jid, msg): 
     message = xmpp.Message(jid, msg) 
     message.setAttr('type', 'chat') 
     self.client.send(message) 
     self.sleep() 

if __name__ == '__main__': 
    j = Jabber() 
    time.sleep(3) 
    j.wake() 
    j.send('[email protected]', 'hello world') 
    time.sleep(30) 

ここでの問題は、私はそれを目を覚ますことができないということのようです。私の最高の推測は、私はある種の並行性が必要であるということです。それは本当ですか、もしそうなら、私はどうすればそれについて最善を尽くすでしょうか?

編集:並行性に関するすべてのオプションを調べた後、私はツイストとwokkelに行くことにしました。できれば、この投稿を削除します。 xtalk.py

それは基本的にコンソールのjabberクライアントですが、shouldn」:

+0

同時にメッセージを送受信できるようにするには、並行性が必要です。 'multiprocessing'モジュールやそこにある多くのチュートリアルの1つを見てください。 – katrielalex

答えて

2
あなたが欲しいものはほとんどありません、(のpython-XMPPのための別の名前である)xmpppy自体の homepageの良い例があります

あなたが望むボットに書き直すのは難しいでしょう。

いつでもオンラインで、メッセージを送受信できます。 と同じ時刻にメッセージを送受信する必要がない限り、ここではマルチプロセッシング(またはその他の並行処理)モジュールの必要はありません。

+0

文書は少し疎です。 xtalk.pyの例を使って、受信したメッセージをどのように出力しますか? – Andrew

+0

@Andrew:xmpp_message関数を詳しく見てください。 – kolobos

0

Process(timeout)のループは、接続を維持しながら新しい着信スタンザを待機して処理するのに適しています。

関連する問題