我应该使用orbited或gevent将comet功能集成到Django应用程序中吗

2024-10-03 13:23:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经和Django一起工作了一段时间,并在一个使用apache2mod_gwsgi的安装程序上编写了几个应用程序,在ubuntu上使用了一个PostgreSQL数据库。在

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

由于我希望这是可伸缩的,所以我不想使用AJAX进行连续的轮询,因为这将在大量用户的情况下变得非常沉重。在

我已经阅读了更多的帖子、网站和博客,然后我可以指望将comet功能集成到Django应用程序中,但是在如何实现这一点上有太多不同的意见,我现在完全搞不清了。在

我应该用轨道的,gevent,iosocket吗? 龙卷风在这场辩论中的地位如何?在

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


Tags: 文件django用户功能视图数据库应用程序表单
2条回答

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

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

我建议使用WebSockets进行双向实时通信。继续按原样运行Django,并在另一个端口上运行WebSocket服务器。至于数据库阻塞,是的,在编写WebSocket服务器时需要记住这一点,要么使用非阻塞数据库驱动程序,要么以某种方式解决这个问题。在

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

对于服务器,我个人倾向于gevent或tornado。对于gevent有gevent-websocketgevent-socketio,对于tornado,您可以获得内置的WebSocket支持,如果您想使用的话,可以使用tornadio插座.IO. Eventlet和{a7}都支持WebSockets。还有一个非常酷的新项目,名为autobahn,它是基于twisted构建的,meinheld有可以使用的WebSocket中间件。在

WebSockets是相当令人兴奋的,因此有大量关于这个主题的好文章。我发现这些帖子很有用:

相关问题 更多 >