使用Twisted和Comet将命令的结果流回浏览器

时间:2010-01-04 10:02:00

标签: python comet twisted stomp orbited

我正在编写一个应用程序,它将服务器上兴奋的python脚本的输出(通过这个我的意思是sys.stdout和sys.stderr)实时流式传输到浏览器。

网站上的用户将被允许选择要运行的脚本,激发并杀死他们选择的脚本,并更改​​一些参数,因此我需要在站点上为每个用户使用不同的线程(用户A可以启动,停止和更改脚本,而用户B可以使用不同的脚本执行相同操作。)

我知道我需要为网络客户端使用彗星,并且看到项目的其余部分是用python编写的,我想使用twisted for server,但是我不确定我需要什么做下一个!

有一些令人生畏的选项(Divmod Mantissa,Divmod Nevow,twisted.web,STOMP等),而且其他一些选项更好地记录下来,使整个事情变得相当棘手!

我有一个使用stompservice on orbited的工作演示,使用Orbited.TCPSocket用于javascript方面,但是我开始认为STOMP通道模型不适用于多线程,多运行脚本(除非我每次运行都会打开一个新频道,但这似乎是对频道模型的错误使用。)

有人能指出我正确的方向,或者我可以从中学到一些示例代码吗?

谢谢!

3 个答案:

答案 0 :(得分:1)

Nevow Athena是专门针对AJAX和COMET应用程序的框架,理论上正是您正在寻找的东西。

但是,我不确定它目前是否得到了充分利用或支持 - 查看邮件列表流量和谷歌搜索结果表明它可能不是。

您可以查看几个教程来帮助您做出决定:

后者的代码似乎包含在Nevow发行版中,当你在/ doc / listings / partxx下载时(我认为...)

答案 1 :(得分:1)

您可以通过保持http连接打开并附加更新dom内容的javascript块来实现非常简单的“HTTP流”。这是有效的,因为浏览器在到达时评估“脚本”块。

我前段时间写了一篇博客文章,其中有一个使用扭曲和极少数几行javascript的运行示例:Simple HTTP streaming with Twisted & Javascript

您可以轻松地将此模式与发布者/订阅者模式混合,以使其成为多用户等。我使用此模式通过Web观看实时日志流。

答案 2 :(得分:0)

使用Twisted为长轮询客户提供服务的示例是slosh。这可能不是你想要的,但因为它不是一个大框架,它可以帮助你弄清楚如何使用Twisted。