5

我使用 Django 已经有一段时间了,并且已经在使用 Apache 2 mod_wsgi 和 ubuntu 上的 PostgreSQL 数据库的设置上编写了几个应用程序。

我有一个应用程序,它使用 xsendfile 通过 Django 视图从 Apache 提供文件,还允许用户通过表单上传文件。所有这些工作都很好,但我现在想通过允许用户聊天并查看何时上传新文件而无需刷新浏览器来提升功能(以及我确信的复杂性)。

由于我希望它具有可扩展性,因此我不想不断地使用 AJAX 进行轮询,因为这对于大量用户来说会变得非常繁重。

我已经阅读了更多的帖子、网站和博客,然后我可以指望将彗星功能集成到 Django 应用程序中,但是关于如何做到这一点有很多不同的意见,我现在完全糊涂了。

我应该使用轨道、gevent、iosocket 吗?龙卷风在哪里适合这场辩论?

我希望消息也存储在数据库中,所以我是否需要任何特殊配置来防止我的应用程序在写入数据库时​​阻塞?使用 Django 运行聊天服务器会对我从 Apache 提供文件的能力产生任何影响吗?

4

2 回答 2

7

我建议使用 WebSockets 进行双向实时通信。保持原样运行 Django 并在另一个端口上运行 WebSocket 服务器。就您的数据库阻塞而言,是的,您在编写 WebSocket 服务器并使用非阻塞数据库驱动程序或以某种方式解决该问题时需要牢记这一点。

在客户端,您需要使用Socket.IOweb-socket-js来支持不支持 flash 的旧浏览器的 flash 回退。

对于服务器,我个人倾向于 gevent 或 tornado。对于 gevent,有gevent-websocketgevent-socketio,对于 tornado,您可以获得内置的 WebSocket 支持,如果您想使用 Socket.IO ,可以使用 tornado。Eventlettwisted都支持 WebSockets。还有一个非常酷的名为autobahn的新项目,它建立在 twisted 之上,并且meinheld有您可以使用的 WebSocket 中间件。

WebSockets 非常令人兴奋,因此有大量关于该主题的精彩帖子。我发现这些帖子很有用:

于 2011-08-15T14:00:11.413 回答
1

您可以使用 Nginx + X-Accel-Redirect 而不是 Apache + X-Sendfile。这样你就可以在 Nginx 后面运行一个 gevent/wsgi/django 服务器,并提供长轮询的视图。不需要单独的 websockets 服务器。

我已经使用 Apache + X-Sendfile 和 Nginx + X-Accel-Redirect 在 Webfaction 上提供(受访问保护的)内容,没有任何问题。

于 2012-06-30T18:08:08.070 回答