Django的实时Web应用程序替代方案

7
我过去一年一直在使用Django开发Web服务器应用程序。我们使用的技术栈是Django + Apache + MySql,非常适合我们的需求。最近,出现了一些实时能力的需求和对服务器应用程序进行大量更改/重写的机会。令我惊讶的是,Django在这里不是最佳选择。
我已经阅读了很多关于推送、WebSockets、gunicorn等方面的内容(http://curella.org/blog/django-push-using-server-sent-events-and-websocket/),但我还没有决定是继续使用Django还是提出一个更适合这项工作的新软件堆栈。使用Django似乎有点不自然。有经验的开发人员能否指导我正确的方向?
因此,基本问题是:除了当前技术栈外,还有哪些替代方案可用于构建实时Web应用程序?
谢谢
注:我不是以英语为母语的人。
编辑:这些替代方案需要允许安全连接。
编辑2:我们开发的Web应用程序是游戏。

请确保您谈论的是实时性而不是高性能。 "高性能" 表示在给定时间内执行的处理量,而 "实时性" 是在可用时间内完成处理以产生有用输出的能力。 - dani herrera
不谈论高性能。 - luistm
请查看以下链接:http://www.pixeldonor.com/2014/jan/10/django-gevent-and-socketio/ 和 http://media.codysoyland.com/pdf/django-on-gevent.pdf。 - Ajeeb.K.P
3个回答

2
你需要根据自己的目标权衡决策。

你想要一个产品

那么就用你最熟悉的语言框架编写代码,只有当你有一个产品并且它有限制时才考虑更换工具。

你想学习新东西

尝试使用新的语言和框架,但是生产产品可能需要更长时间,并且你可能会发现新工具并不比旧工具更好。

半斤八两

尝试启动两个项目,在每个项目中构建相同的东西,只是使用另一个工具。这将需要更长时间,但你应该能够很快看出哪个工具更适合你的任务。

替代方案

我不太确定你所说的Django是“unnatural”是什么意思。Django可以进行服务器/客户端通信 - 只需使用一些AJAX与Django服务器通信,然后调用另一个Python库来处理请求。Python替代品包括优秀的flaskweb.py,但除非您也对它们进行编程(如Django),否则它们都不能进行客户端/服务器通信。如果您不喜欢Python,可以尝试ruby on rails。对于客户端,您需要了解一些JavaScript知识,因此请去学习它(coffescriptjQuery可以减轻JS的痛苦,但首先要学习JavaScript)。
当然,您也可以选择接受node.js作为服务器基础,据说它非常好用(我还没有尝试过) - 而且它是用JS编写的。
编辑: 根据您的评论,仔细查看以下内容: 请注意,这个问题可能是一个重复的问题。

他想使用比Ajax更大的Comet技术,他只是想知道Django能否处理。他的产品是基于Web的游戏,因此我认为他知道如何处理正常的Ajax元素。 - Thai Tran
嗨,感谢您的回答。我所说的“不自然”是指,除非客户端发出请求,否则它无法向客户端发送任何内容。在我的理解中,在实时系统中,服务器应该被允许更新客户端。如果我有5个玩家参与游戏(每个人都在自己的浏览器中),其中一个人拿起了旗帜并获胜,我希望其他人能够立即知道这一点。 - luistm

2

我认为我会继续使用django+apache,但我会添加tornado来处理实时内容,并使用mongoDB或redis进行django和tornado之间的跨通信。在这些之前,我将使用nginx将每个请求重定向到适当的Web服务器。 - luistm
我建议使用sock.js而不是socket.io。 - Edgar Navasardyan

1
针对实时Web应用程序,我建议您使用WebSockets,它们可以保证安全性,并且响应时间非常快,因为一旦建立连接就不再有通信开销。如果您精通Python,您可以使用Twisted在Python中创建服务器,并使用Python和/或JavaScript中的Autobahn来创建客户端。附注:这里是一个Twisted的非常好的教程。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接