Gab*_*aru 12 python django rabbitmq celery greenlets
我需要在django中开发一个实时的最近活动源(使用AJAX长轮询),我想知道什么是服务器端的最佳策略.
伪代码:
def recent_activity_post_save():
notify_view()
[in the view]
while not new_activity():
sleep(1)
return HttpResponse(new_activity())
Run Code Online (Sandbox Code Playgroud)
首先要记住的是每秒查询数据库.不可行.其他选择:
什么是最好的方式去这里?
我建议保持简单......
创建一个数据库表来存储您的事件,在适当的时候插入到该表中,然后实现一个简单的ajax轮询技术,在客户端每x秒命中一次服务器.
考虑使用推送通知方法或使用noSql数据存储,我对其他解决方案感到担忧.它比使用Django框架内置的工具的传统拉动通知系统复杂得多,除了非常罕见的例外,它是过度的.除非您特别需要严格的实时解决方案,请保持简单并使用框架中已存在的工具,对于基于数据库或网络性能的反对者,我不得不说的是,过早优化是根本原因.万恶之物
构建一个包含特定于您的应用程序的最新活动数据的模型,然后,只要您的应用程序执行了应该记录您可以插入此表的新活动的内容.
您的视图将像任何其他视图一样,从此表中拉出前x行RecentActivity
(可选择基于查询参数等).
然后,在客户端,你只需要一个简单的ajax轮询器每隔x秒就能看到你的视图.您可以使用复杂的插件和技术,但编写自己的插件和技术并不复杂:
function simplePoll() {
$.get("your-url", {query-parameters}, function(data){
//do stuff with the data, replacing a div or updating json or whatever
setTimeout(simplePoll, delay);
});
}
Run Code Online (Sandbox Code Playgroud)
我的观点是,在您的网站成功完成问题之前,性能问题并不是真正的问题.传统的关系数据库可以很好地扩展,直到你开始达到Twitter,谷歌等成功的水平.我们大多数人都没有达到这个水平:)
归档时间: |
|
查看次数: |
1962 次 |
最近记录: |