2010-11-24 46 views
1

我正在使用python-xmpp發送jabber消息。除了每次我想發送消息(每15分鐘)我都需要重新連接到jabber服務器,並且同時發送客戶端處於脫機狀態並且無法接收消息,一切正常。在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去。如果可以的話,我會刪除這篇文章。

+0

如果您希望能夠同時發送和接收消息,則需要併發性。看看`multiprocessing`模塊或者其中的很多教程之一。 – katrielalex 2010-11-24 17:10:20

回答

2

上有xmpppy本身(這是蟒蛇,XMPP另一個名字),你想要什麼該做幾乎的homepage一個很好的例子:xtalk.py

它基本上是一個控制檯的Jabber客戶端,但不應該」 t很難重寫成你想要的機器人。

它始終在線並可以發送和接收消息。除非您需要在的完全相同時間上接收和發送消息,否則我不認爲需要多處理(或其他併發)模塊。

+0

該文檔有點稀疏。使用xtalk.py示例,如何打印收到的消息? – Andrew 2013-04-02 01:00:55

0

通過Process(timeout)方法的循環是在保持連接的同時等待和處理任何新傳入節的好方法。