Python中的彗星
我对用Python做网页编程还很陌生。
我想在浏览器上建立一个聊天室(只是个原型)。我对Django比较熟悉,也在过去用过一点Twisted。
然后我遇到了Orbited。这个东西的文档写得很糟糕(我觉得根本不算文档),但有几个词经常出现:
- Orbited
- Twisted
- MorbidQ、ActiveQ,以及一堆消息队列技术
我在Orbited的网站上做了一些例子,但它们似乎并没有真正解释这些东西是怎么一起工作的。
我有几个问题:
我总是看到http://:9000在[listen]指令中。根据他们的网站,“listen部分描述了Orbited应该使用哪些接口和端口来接受浏览器连接。”我知道标准浏览器使用80端口进行通信。我觉得这个端口是用来让orbited.js连接服务器进行Comet技术的?如果8000端口被封了(比如在学校或组织的防火墙后面),会发生什么?
我总是看到“代理”这个词。我不知道实际的代理在这些框架组合中是怎么运作的。
Twisted和Orbited之间的关系。Orbited是建立在Twisted之上的(如果我没记错的话)。那么为什么有那么多例子讨论在Twisted之上使用Orbited?我为什么一开始就需要Twisted?我可以在nginx上使用Orbited吗?(再次搜索nginx和Orbited,结果中总是有“代理”这个词。这到底是怎么回事?)
关于http://anirudhsanjeev.org/tutorialhow-to-django-comet-orbited-stomp-morbidq-jsio/,作者使用了一个xml-rpc服务器。有人能解释一下为什么吗?(他提到“你不能在Django视图中启动一个反应器发送/接收系统”,但我们为什么一开始就需要在里面运行一个反应器?难道Orbited不是建立在Twisted之上吗?那它不应该有自己的反应器吗?)
MorbidQ自称是“一个没有集群潜力的STOMP发布/订阅服务器。它支持发布/订阅主题,并作为单个节点运行。”我们为什么需要这个?难道Comet不正好解决了这个问题吗?为什么我总是看到结合了很多看似相似但实际上有明显区别的技术的教程?
我只想做一个简单的网页聊天应用。看到这些后,我意识到使用Orbited、Twisted、MorbidQ和Django等可能太麻烦了。(当然我计划让它可扩展)。
我看过Tornado,它还不错,但在社区方面感觉有点小。它其实并不真正支持Comet,只是允许非阻塞连接(我在IRC上学到的)。我真的需要所有这些特殊的Comet技术吗,还是长轮询就能满足我?(对于一个简单的网页聊天应用)
大公司都在用什么?大公司使用的标准Comet框架是什么?(比如Facebook、Gtalk和Twitter?)这些在Python中有吗?
对任何问题的帮助都将不胜感激。
2 个回答
我也在为这个问题苦恼,不过我想我可以回答一些问题,供以后参考。
1) 如果那个端口被封锁了,你的网站就无法和Orbited进行通信。
2) 代理有很多种理解,可以把它想象成“重定向”,nginx就是一个代理。
3) orbited是基于twisted构建的,但它会启动自己的Twisted服务器。提到twisted时,人们可能会谈论他们用Twisted开发的应用,而不是Django或其他框架。
4) 你可以避免使用RPC,直接通过Django脚本发送post/get请求把消息放入队列,他可能想要构建得更“企业化”一些。
5) morbidQ是一个队列系统。Comet只是一个概念。框架是为了解决特定问题而构建的,可能还有其他类似的解决方案,但在这种情况下没有那么完整。我个人把morbidQ换成了rabbitMQ。
6) 你说得对,扩展性更多取决于你的编码能力,而不是你选择的技术。
7) tornado非常棒。所有被认为特殊的东西都没有完全的浏览器支持,而长轮询是有的。
8) 他们还没有开源他们的comet解决方案。不过这没什么大不了的。我觉得ruby在这方面更成熟。
希望这些能帮助到未来的网络用户!