龙卷风 Web 应用程序中的 Python xmpp jabber 客户端
Posted
技术标签:
【中文标题】龙卷风 Web 应用程序中的 Python xmpp jabber 客户端【英文标题】:Python xmpp jabber client in tornado web application 【发布时间】:2012-06-16 12:08:04 【问题描述】:我是一名桌面程序员,但我想学习一些有关 Web 服务的知识。我决定使用python。我正在尝试了解 Web 应用程序的工作原理。我知道如何创建基本的龙卷风网站(请求 - 响应)和工作的 jabber 客户端,但我不知道如何混合它们。我可以在 Web 服务中使用任何 python 组件吗?它们是否必须具有特定的结构(同步或异步)?因为我被困在循环处理程序中:
如果tornado通过命令启动网络服务器:
app = Application()
app.listen(options.port)
tornado.ioloop.IOLoop.instance().start()
...那么如何(在哪里)启动 xmpp 循环?
client.connect()
client.run()
我认为 tornado 监听循环应该处理 xmpp 监听,但不知道如何
问候。
编辑:我忘了。我正在使用 pyxmpp2
【问题讨论】:
【参考方案1】:我相信你想要完成的事情在 python 的一个线程中是不可行的,因为两者都试图同时收听,这在一个线程中是不可能的。我可以建议看看this 线程教程。
另一个问题是您是想制作一个基于 Web 的 xmpp 还是只是让一个 xmpp 和 html 服务器在同一个脚本中运行。如果您想尝试前者,我建议您使用zeromq 或queue 研究线程间通信
【讨论】:
我正在尝试创建基于 Web 的 xmpp 客户端。感谢您的链接 当我尝试在线程中运行 xmpp 循环时出现错误:'thread._local' object has no attribute 'serializer' 用您遇到问题的确切代码更新您的问题,我会帮助您解决问题 似乎 pyxmpp2 在线程中工作有问题。所以我尝试使用 xmppy 并且工作正常(我可以运行 tornado 服务器并连接到 xmpp 服务器)。 Xmppy 需要程序员创建的无限循环来处理连接,这正是我所需要的。所以我关于“混合”的主要问题已经解决,其余问题将在另一个主题中发布;)谢谢 没问题 :] 很高兴能提供帮助 :D【参考方案2】:也许 WebSocketHandler 和 Thread 会帮助你。
演示
类 BotThread(threading.Thread): def __init__(self,my_jid,settings,on_message): 超级(BotThread,self).__init__() #EchoBot 是 pyxmpp2 的客户端 self.bot = EchoBot(my_jid, settings,on_message= on_message) 定义运行(自我): self.bot.run() 类 ChatSocketHandler(tornado.websocket.WebSocketHandler): 定义打开(自我): #init xmpp 客户端 我的_jid = 设置 = bot =BotThread(my_jid, settings,on_message=self.on_message) bot.start()【讨论】:
以上是关于龙卷风 Web 应用程序中的 Python xmpp jabber 客户端的主要内容,如果未能解决你的问题,请参考以下文章