龙卷风 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 客户端的主要内容,如果未能解决你的问题,请参考以下文章

python 如何正常关闭龙卷风Web服务器的示例...

龙卷风网络服务器中的 json rpc

python龙卷风中的SSL(https)

为异步龙卷风 Web 套接字服务器编写同步测试套件

如何在龙卷风对象中定位检查用户的cookie?

不用媒体查询做web响应式设计-遁地龙卷风