我正在使用python-xmpp发送jabber消息。一切正常,除了每次我想发送消息(每15分钟)我需要重新连接到jabber服务器,而在此期间发送客户端是离线的,不能接收消息。
因此,我想编写一个非常简单的、无限期运行的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('receiver@example.org', 'hello world')
time.sleep(30)这里的问题似乎是我无法唤醒它。我最好的猜测是我需要某种并发性。这是真的吗?如果是这样,我该怎么做呢?
编辑:在研究了所有与并发相关的选项后,我决定使用twisted和wokkel。如果可以,我会删除这篇文章。
发布于 2010-11-25 20:21:33
在xmpppy本身的homepage (这是python-xmpp的另一个名称)上有一个很好的例子,它几乎完成了您想要做的事情:xtalk.py
它基本上是一个控制台jabber客户端,但应该不难重写成你想要的机器人。
它总是在线的,可以发送和接收消息。我不认为这里需要多处理(或其他并发)模块,除非您需要同时接收和发送消息。
发布于 2010-12-22 17:49:25
在Process(timeout)方法上执行循环是在保持连接正常的同时等待和处理任何新传入的节的好方法。
https://stackoverflow.com/questions/4269441
复制相似问题