六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 38|回复: 0

fastcgi工作方式引起的问题

[复制链接]

升级  12.67%

70

主题

70

主题

70

主题

举人

Rank: 3Rank: 3

积分
238
 楼主| 发表于 2013-1-23 02:54:32 | 显示全部楼层 |阅读模式
环境:debian + fastcgi + nginx + django + sqlachemy +mysql
问题:在页面中使用ajax发起删除操作之后,再另一个发起查询,查询出来的是删除之前的数据.
同事猜测:html缓存/我觉得不是html的缓存,而是fastcgi处理方法引起的.(在另一篇我会说说django页面处理.)
ajax代码:
/* url="/conf/del_warnlog_rt_ajax/"
 * dic= { "key":"value" }
 */
function deal_ajax( url, dic ){
    $.post( url, dic, function( data ){ 
        get_app_table_2();//更新页面table表的数据
    })
}
如果去掉nginx+fastcgi的话,直接:
    python manage.py runserver 0.0.0.0:8966
运行的话,不会出现前面的问题.
 
对比这个2种情况:可以隐约知道是fastcgi在做好事情:
1.直接运行django的话:web服务器处理方式方法:先请求第一个url,之后再运行get_app_table_2()---瞎猜的,至少程序表现就是如此.
 
2.而运行fastcgi的话:web服务器(准确的说是nginx+fastcgi+django)表现是处理了第一个url请求,(一次有可能要删除好几十条记录),在这个删除还没有完成,就返回给用户了,页面立即发起另一个请求: get_app_table_2(),结果页面显示出来的是删除失败!实际上查看mysql,删除以及完成,之后点击翻页也表现出数据库的改变.翻页也是调用get_app_table_2()这个函数的完成请求,可见页面不是因为缓存引起的问题.(Fastcgi到底是什么样的技术里面可能能够解释这个现象!)
 
----------------------------------------------Fastcgi到底是什么样的技术-----------------------------------------------
从性能上看, fastcgi把动态逻辑的处理从server中分离出来, 大负荷的IO处理还是留给宿主server, 这样宿主server可以一心一意作IO,对于一个普通的动态网页来说, 逻辑处理可能只有一小部分, 大量的图片等静态IO处理完全不需要逻辑程序的参与(注1)
----------------------------------------------------------------------------------------------------------------------------------
经过以上分析:我觉得对常规处理函数deal_ajax进行针对性改进:
     get_app_table_2()-->setTimeout( "get_app_table_2()", 500 );
延时调用下一个url请求:
 
结果:运行fastcgi验证,表现正常.
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表