+ -
当前位置:首页 → 问答吧 → 基于Ajax的实时信息提示(月影)

基于Ajax的实时信息提示(月影)

时间:2007-11-26

来源:互联网

作者:月影  2007-11-25 于昆明
关键字 B/S信息实时提示 Ajax
在笔者的一个B/S项目中,涉及到一个订单信息实时提示问题,客户对此实时提示的要求是:
当用户在远程下了一个订单的时候,那么在操作员的浏览器窗口上应该出现一个提示,告诉操作员有新订单,及时处理。
初次想到的就是:利用meta 定时刷新页面,但是在项目实际中,这是根本无法用的,原因如下:
一、页面每刷新一次,都得重新读取一次数据库,无形之中加大了数据库的负担;
二、刷新的时间间隔不能太长,否则,就达不到实时提示的要求;
三、每次刷新不一定能遇到有新订单产生的情况,也就是说:这些频繁的刷新,大多情况下,是没有新订单的;
四、当刷新时,必然会影响到操作员正在进行的工作--肯定是没法用的;
五、综合以上4点,于是决定用隐藏的框架,但是用隐藏的框架,前面三条的问题还是存在;
所以,定时刷新,是行不通的,后来,就借助Ajax,很好地完成了这个要求。但是先别急是怎么实现的,分析一下它内在的逻辑:
A事件:当远程用户下订单的时候―――>数据库产生一条新的订单记录
B事件:当操作员处理订单的时候―――>数据库新订单记录编辑
关键是A,如果我们在发生A事件的时候,能标记出它,那么,我们的客户端的Ajax再读取这个标记,不就可以实现了吗?事实上,实现原理就是这样的。
原理流程:
当远程用户下新订单的时候,数据库必然产生新的记录,这时用你的服务器端程序(ASP,PHP,JSP,CGI,ASP.NET均可)去建立一个文件(如htm格式,假设名字为new.htm),里面的内容自己随心写入就行;
然后,我们客户端的Ajax每隔一定时间(如20秒,或10秒)去读取上面建立的新文件new.htm ,如果发现这个文件的内容不为空,则表明有新订单生产,于弹出一个对话框,提示操作员“有新订单”之类的消息,于是,操作员便可以对这些订单处理。
当操作员处理完这些订单的时候,这里,就是没有新订单了,那么服务器端程序这里将上面的文件new.htm 内容清空。OK ,这时,如果没有新订单,客户端将永远不会有提示。
当然,利用Ajax有什么优点是不言而喻的,它在极大程度上减少了数据库的开销,只是在数据库发生改变的时候建立一个很小的文件,无论新订单如何多,操作员界面的信息提示永远不必直接读取数据库;
另外一方面,也极大地提高了系统的UI检验效果!何乐而不为?
说到这里,有人就要问了:如果有很多操作员,并且这些操作员处理不同部门的订单,如何做?--哈哈,更简单了,为每个部门的新订单建立新的标记文件就行了
类似的,像论坛的信息提示,订单实时提示,都可以用这个方法解决,不过这里的实时是有间隔的,反正这里不是导弹A-STA控制系统,有20秒的间隔延迟,也是完全可以的!
除非你要用Ajax开发导弹A-STA控制系统实时监控系统,那我是没办法的!
老考虑到代码,我就不在此发了,发出来,也只会让你看得头昏。所以,我提供一个演示地址:
这是模板一个会员管理系统,当有新会员注册时,管理员页面应该有提示
http://itzhiling.com/au/new.php    申请会员--模拟新用户注册
http://itzhiling.com/au/opt.htm     管理员操作页面--演示Ajax的提示效果
要注意到,这整个过程,页面是没有刷新的;使用方法,打开两个浏览器窗口,一个的地址栏输入http://itzhiling.com/au/new.php ,另外一个的地址栏输入http://itzhiling.com/au/opt.htm
,然后,在new.php 窗口中注册一个新用户,再注意opt.htm窗口中的提示信息!
当它提示有新用户注册时,点击OK,打开申核页面,申核后,点击上面的“关闭申核页面”,将不会有提示(除非又有人注册)。
文件包里的文件说明一下:
Ajax.js     自己封装的Ajax库
Class_access.php  ,  global.config.php , gobal.func.php  ,  global.inc.php 一些类库,函数库,可以不用看
New.php   新用户注册页面
Opt.htm    管理员页面
au.php      管理员申核页面
t.mdb    数据库文件,保存用户注册信息

[ 本帖最后由 xuer 于 2007-11-25 22:23 编辑 ]
附件: 您所在的用户组无法下载或查看附件

作者: xuer   发布时间: 2007-11-25

收藏了!

作者: blankyao   发布时间: 2007-11-25

不错~。。。先下了,等下看源码

作者: eclanp   发布时间: 2007-11-25

收下了。。。。。。。。。。。。

作者: nywrb   发布时间: 2007-11-26

作者: MoHock   发布时间: 2007-11-26

,挺好的,收藏了,偷偷的笑笑

作者: zjh00958   发布时间: 2007-11-26

强.............顶一下!

作者: londit.cn   发布时间: 2007-11-26

你的思路很好,值得推荐,不错不错!支持你

作者: xiemengjun   发布时间: 2007-11-27

借鉴了。.顶一下

作者: xiangxubing   发布时间: 2007-11-27

服务器非得被你搞死不可

作者: lshfong   发布时间: 2007-11-27

收藏

作者: chyoqin   发布时间: 2007-11-27

引用:
原帖由 lshfong 于 2007-11-27 17:09 发表
服务器非得被你搞死不可
看�磉@��朋友�]有弄明白我的程序的思路,我的程序的思路就是最大程序�p少服�掌鞯呢��d,如果有普通的自�铀⑿马�面,你����吧,不停的�x�����欤�是什�N效果?

作者: xuer   发布时间: 2007-11-27

作者: muqiao   发布时间: 2007-11-27

顶一个,
我这几天恰好也准备做类似的功能,呵呵。

不错不错。

作者: BillyFan   发布时间: 2007-11-27

很好,和我原来想法差不多,原来我做即时消息就是,如果某用户1向用户2发了消息就写一个1.txt的文件,ajax定时判断文件是否存在就取出消息数据后删除这个文件

作者: dzjzmj   发布时间: 2007-11-27

思路很好,但如果用户量非常大,有可能会比你直接用数据库更造成服务器负担。

作者: aoreal   发布时间: 2007-11-28

作者: wedypei   发布时间: 2007-11-28

所藏了~~很强大

作者: yufenglx   发布时间: 2007-11-28

引用:
原帖由 aoreal 于 2007-11-28 14:26 发表
思路很好,但如果用户量非常大,有可能会比你直接用数据库更造成服务器负担。
但是目前我还没有其它更好的解决办法 ?
你所说的,直接用数据库吗?那就也就是说,得每隔20秒刷新一次页面,那么在刷新页面的时候,就又得重新读取一次数据库,再重新加载整个页面,所以,整个服务器的负担是用Ajax几百倍以上

这个Ajax请求的文件很小,只有几个字节而已,Apache负载能力完全可以够用。

恳请高手提出更好的解决办法!

那么你的办法是什么呢?

作者: xuer   发布时间: 2007-11-29

别的方式应该还有。ECSHOP的定单处理,它用的服务器框架是用cpaint,具体的原理还没有研究过,楼主可以去下来看看。。。。8过,LZ的思路也可以,但是总感觉很牵强,应该还有更好的思路。。

作者: zhengdl126   发布时间: 2007-11-30

引用:
原帖由 zhengdl126 于 2007-11-30 14:11 发表
别的方式应该还有。ECSHOP的定单处理,它用的服务器框架是用cpaint,具体的原理还没有研究过,楼主可以去下来看看。。。。8过,LZ的思路也可以,但是总感觉很牵强,应该还有更好的思路。。
我也想找一个更好的方法,但是还没想到,如果你有好的方法,请及时发贴为盼,谢谢

作者: xuer   发布时间: 2007-12-01

触发器往临时表里写入基本信息,我想刷一个几十条数据的表,对于mysql来说很轻松吧,不必要建立文件,也没有必要通读整个数据表。楼主的代码看过,零散,思路简单应用还可以。

作者: T.T.R   发布时间: 2007-12-01

引用:
原帖由 T.T.R 于 2007-12-1 12:57 发表
触发器往临时表里写入基本信息,我想刷一个几十条数据的表,对于mysql来说很轻松吧,不必要建立文件,也没有必要通读整个数据表。楼主的代码看过,零散,思路简单应用还可以。
这位朋友看来,没有看清楚我的文章所表达的意思 ,我那个文章也没有说要读取整个数据表啊,“我想刷一个几十条数据的表,对于mysql来说很轻松吧”--这样页面不还是有刷新吗?一旦刷新,那么不就影响了操作员的当前操作?而且这样频繁刷新,对服务器也是一个不小的负担啊--因为它间隔时间比较短啊。

那么临时表建立好了,如何实时将这个信息通知级客户端?页面刷新?还是Ajax?还是隐藏框架?这个问题一直困扰着我,希解答为盼!不甚感激!

请大家给一个好的解决办法吧,最好带上演示
恳求各位高手出马解决!

[ 本帖最后由 xuer 于 2007-12-1 14:37 编辑 ]

作者: xuer   发布时间: 2007-12-01

一、页面每刷新一次,都得重新读取一次数据库,无形之中加大了数据库的负担;
二、刷新的时间间隔不能太长,否则,就达不到实时提示的要求;
三、每次刷新不一定能遇到有新订单产生的情况,也就是说:这些频繁的刷新,大多情况下,是没有新订单的;
四、当刷新时,必然会影响到操作员正在进行的工作--肯定是没法用的;
五、综合以上4点,于是决定用隐藏的框架,但是用隐藏的框架,前面三条的问题还是存在;
用ajax就解决了?

作者: phphp   发布时间: 2007-12-04

用$.getIfModified

只读文件的最后修改时间!

作者: wangchun   发布时间: 2007-12-04

不错 不错

作者: wangchun   发布时间: 2007-12-04

引用:
原帖由 Lukin 于 2007-12-6 14:33 发表
用$.getIfModified

只读文件的最后修改时间!
这位兄弟说的是用jQuery类来做,呵呵,确实很方便,有新消息只要向一个中间文件(比如a.txt)中写入,这样a.txt的时间就更新了,然后聊天的双方只要隔一定时间用$.getIfModified方法去读a.txt,看时间是变更,如果变更了就读

作者: Lukin   发布时间: 2007-12-06

每个用户都有自己的独立XML文件,客户留言的同时向XML加一个节点,包括信息ID和添加时间,AJAX只读取XML节点状态进行判断。发现ID直接提示某个客户在什么时间给你留言点击直接用ID找到记录显示。读取后就删除这个节点。如果考虑I/O就把XML独立到单独服务器上,如果用户量太大就按字母和数字或者按时间进行分目录。

作者: blue5tar   发布时间: 2007-12-06

收藏先,一会去看代码!
谢谢!

作者: lwkyy   发布时间: 2007-12-08

引用:
原帖由 xuer 于 2007-12-1 14:33 发表
这位朋友看来,没有看清楚我的文章所表达的意思 ,我那个文章也没有说要读取整个数据表啊,“我想刷一个几十条数据的表,对于mysql来说很轻松吧”--这样页面不还是有刷新吗?一旦刷新,那么不就影响了操 ...
他的思路跟你是一样的,其实无非就是客户端轮询。只不过你用的是文件保存标志,他说的是用数据库。你用文件并不一定就能够比数据库更减轻服务器负担,相反,当连接数量大时,频繁的IO操作反而加重了服务器负担。这跟要尽量少使用session存储大数据的原理是一样的。

作者: learsu   发布时间: 2007-12-10

  思路很清晰.
不错

作者: gdk2006   发布时间: 2007-12-11

引用:
原帖由 finian 于 2007-12-11 12:33 发表


他的思路跟你是一样的,其实无非就是客户端轮询。只不过你用的是文件保存标志,他说的是用数据库。你用文件并不一定就能够比数据库更减轻服务器负担,相反,当连接数量大时,频繁的IO操作反而加重了服务器负担。 ...
读数据库就不用I/o操作了吗?,简直是无稽之谈,读数据库的过程就是:查询数据库+重新加载页面,重新加载页面,肯定得读页面文件对吧?读页面文件肯定就有I/O操作,对吧?那你怎么解释?
我不敢承认你错,但是有异议.
而且你重新加载页面,那么当数据量比较大的时候,怎么办?还不是一样要加载一个体积很大的页面?服务器生成页面,难道就不用I/O操作了吗?

到底哪个方法更节省服务器资源,大家作过相应的测试吗?

我实在在知道这个答案,不过,有朋友做JQuery,来读文件的最后修改时间,我倒是觉得很可取的
欢迎大家踊跃参悟讨论!!!

[ 本帖最后由 xuer 于 2007-12-11 21:52 编辑 ]

作者: finian   发布时间: 2007-12-11

楼主写得很好,向你学习

作者: 特蓝克斯   发布时间: 2007-12-11

先下了,等到了那水平再拿出来研究下!

作者: xuer   发布时间: 2007-12-11

思路不错。AJAX新手,不懂其它方法,谢谢楼主的源码,我研究研究。

作者: kupe   发布时间: 2007-12-14

引用:
原帖由 xuer 于 2007-12-11 21:47 发表
读数据库就不用I/o操作了吗?,简直是无稽之谈,读数据库的过程就是:查询数据库+重新加载页面,重新加载页面,肯定得读页面文件对吧?读页面文件肯定就有I/O操作,对吧?那你怎么解释?
我不敢承认你错,但是 ...
我faint,我有说读取数据库就不用I/O操作吗?这些都是基于文件系统的,怎么可能不用I/O?只不过比起纯粹的文件操作,数据库的效率肯定是高的,至少是经过优化了的,否则要数据库来干嘛。另外,你为什么就偏执地认为操作数据库就一定要重新加载页面呢?难道使用数据库就不能用ajax?ajax的使用根本就和你的data source无关,所以我才说你的思路和另外一位兄弟说的使用数据库是一样的,而且思路无非就是,客户端轮询。所以你data source用文件的话效率未必就比得上数据库。

作者: rebill   发布时间: 2007-12-15

建议看看Http 1.1 Etag和Last-Modified

作者: saso   发布时间: 2007-12-15

还是麻烦楼上的仁兄给个例子吧,否则,我实在不敢苛同你的观点!-----我不能同意你说的每一个字,但是我誓死捍卫你说话的权力!

毛主席教导我们: 实践是检验真理的唯一标准,那么,你做出个例子来,再说明你的正确

我目前,不敢说你是错误的,只是在未经过你的实践证明之前,它是不会成为真理的

我也相信你通过事实,证明我是错的,而你是对的-----也只有这样,社会才有进步嘛

每个人的一小步,就是社会的一大步!!!

[ 本帖最后由 xuer 于 2007-12-16 02:21 编辑 ]

作者: finian   发布时间: 2007-12-15

不错,收藏先

作者: finian   发布时间: 2007-12-15

讨论很激烈呀.哈哈...
不过,我倾向于顶楼主,就数据库和文本而言,如果是从序列化数据层面来讲,database明显优于文本,但如果只是简单的判断及没有复杂的解析过程,数据库怎么可能比单纯的文本快?如果是这样,那为什么还要生成html,为什么还要做database cache?从底层结构来讲,我们可能把一些需要解析,并且有一定逻辑性的东西放到数据库里,但仅仅是取东西或者做判断状态,我顶楼主...

哈,一家之言,姑且听之笑之.

作者: xuer   发布时间: 2007-12-16

其实没有必要使用文件的。直接用数据库就可以了,如果觉得效率有问题,可以使用内存表解决问题。你的这个应用订单只是一个过度数据所以使用内存表没有任何问题。我曾经做过一个VOD点播系统,基于MYSQL的。使用内存表,20万条数据每秒钟被查询超过50次,毫无问题。相比压力应该比楼主大很多吧?

作者: emaili   发布时间: 2007-12-16

引用:
原帖由 xuer 于 2007-12-1 14:33 发表


这位朋友看来,没有看清楚我的文章所表达的意思 ,我那个文章也没有说要读取整个数据表啊,“我想刷一个几十条数据的表,对于mysql来说很轻松吧”--这样页面不还是有刷新吗?一旦刷新,那么不就影响了操 ...
就这个项目而言,我是这样理解的:
10万条数据之内,mysql和mssql应该是没什么区别的,我们公司有一个电影站,有7万条数据,同时看电影的人有1000+人,没点一次播放就要刷数据库一次,而顾客看电影的实时进度也是要跟踪写入的,服务器本身没什么太大负担,cpu也不高,内存多点而已,你这个管理员也不至于1000人同时在线吧,ajax+1分钟刷新,没什么问题。

如果是做别的,那就另当别论了,就你现在这个项目,ajax实时刷新临时表根本就没什么问题,你实践了就知道了,具体项目具体分析,还有,不要以为写文件就没有什么大碍,频繁的读写文件对磁盘有很大影响。

作者: 无喱头   发布时间: 2007-12-16

如果服务器是自己的,加一个memcache扩展,这样性能最高,数据直接缓存进内存。
缓存数据只保存新生成的订单数量,每生成一个订单,写缓存,订单数量加一;每次Ajax请求,读缓存,重设缓存为0,然后返回新订单数目。
这样不会有I/O操作,如果你乐意,甚至可以将新的订单信息写进缓存。
这是针对windows的memcache的扩展,根据php版本选择:
http://pecl4win.php.net/ext.php/php_memcache.dll
只要修改php.ini,加一条extension=php_memcache.dll就可以用了。

作者: qwl   发布时间: 2007-12-17

这是我自己写的聊天室 http://www.joymaple.com/myos.html (左上角按钮进入聊天室)
我想也是用楼主的方法..不过不同的我是用XML文件来存储聊天记录..用户每几秒就用AJAX读取那个XML文件,如果发现有新信息就写入到用户聊天界面,和楼主的应该都差不多吧...大家觉得真的会很耗服务器资源嘛?

还有,有朋友说用MYSQL的内存表来实现..怎么用呢???

作者: T.T.R   发布时间: 2007-12-17

不要只说不做,咱们没必要在这里争论,你拿出实例来,才是最好的证明

作者: carche   发布时间: 2007-12-17

想来想去还是楼主的办法可靠,无论是memcache还是数据库内存表,都需要Apache启动php解释引擎,楼主的办法可以避免脚本解析。而且楼主的要求不需要返回复杂数据,犯不着查询数据库。
有人提议用网页的修改日期来标示,这需要服务器配置php的参数last_modified为1,并不是很可靠。

作者: wenfeng2   发布时间: 2007-12-17

读文件也要经过你说的这个步骤好吧……

我认为这个是一个脱裤子放屁的题目。(直白了……)

对于如此之小的操作而言,无论你使用数据库还是使用文件或者使用内存其实都根本没有所谓。完全不会对系统有任何负担。

从最纯粹的理论上说,可能楼主的方法系统占用率更低。毕竟不用打开SOCKET连接SOCKET然后MYSQL还要算一大堆指令才能出数据。

但是,但是啊,考虑到系统的可维护性还有整体的代码质量以及编程速度与质量,很明显使用数据库是最稳妥方便的办法。

我认为咱们都不是做单片机开发的,为了几个字节的内存要优化半天代码。在硬件资源没有任何问题的情况下,更多的应该考虑更加上层一些的东西。

大家说呢?

作者: xuer   发布时间: 2007-12-17

LS正解~

作者: carche   发布时间: 2007-12-17

还不错..

作者: wangchun   发布时间: 2007-12-17

思路不错,比查数据库好多了!

作者: qwl   发布时间: 2007-12-17

我觉得楼主是有道理的,要不,为什么新闻网站一般都要将新闻生成静态页面呢?

如果读数据库效率更高?那么为什么还要生成静态页面?

如果真这样说,那我看所有的新闻网站的都是猪头不成?

楼上,觉得你的办法好,但是你没有证明出来啊?楼主有例子,我也用它的方法,效果不错的,根本不会消耗服务器太多资源的

希望楼上能出你的方法的实例!!谢谢

[ 本帖最后由 chunhua 于 2007-12-18 22:56 编辑 ]

作者: T.T.R   发布时间: 2007-12-17

倘若单用在后台管理 我认为楼主的方法可行

如果在做一些基于用户体验的功能设计时候 因为压力大 就必须考虑更多方法了

在压力大的情况下,  虽然说只不过几字节的文本, 但是IO操作频繁,用数据库也有弊端,所以就要好好权衡下了.

小弟还菜, 没啥好的建议,只是说下自己的感受.

作者: wangchun   发布时间: 2007-12-17

楼主的方法并没有频繁的写文件操作呀,大家难道没有注意到吗?

只是在产生新订单,申核新订单的时候写一下文件而已啊,其它Ajax请求的时候并没有写文件,只是读文件而已呀?

你们这些猪头,楼主的代码并没有频繁地写入文件呀?

作者: gleon   发布时间: 2007-12-18

都是讨论,意见不同,不用骂人啊,呵呵

我个人觉得主要干这个公司的规模,如果要是有上万人操作这个系统,估计那种方法都不好,如果要是很少人的话,操作数据库就可以了。

php本身就是用来快速开发的,所以如果不是很大规模的访问,还是越简单越好。呵呵

作者: ak-1   发布时间: 2007-12-18

收藏了。
以前遇到过这样的问题,但是一直没有想到很好的解决办法。跪谢了。

作者: wangchun   发布时间: 2007-12-18

zhichixia

作者: chunhua   发布时间: 2007-12-18

支持顶下.不错

作者: zwws   发布时间: 2007-12-18

...............................

作者: chunhua   发布时间: 2007-12-19

收藏了!

作者: wangchun   发布时间: 2007-12-19

不�e,收藏啦

作者: donglong   发布时间: 2007-12-19

收藏了

作者: hurrayboy   发布时间: 2008-01-09

MM哦。。

作者: 小拨   发布时间: 2008-01-09

如果访问量大,服务器都会搞死,不过,思路不错。要顶!!

作者: fyp83   发布时间: 2008-01-10

我认为楼主的解决方案很好,几个问题:

1、自动刷新及频率问题
META、隐藏框架、AJAX都可以解决,刷新频率都可以控制。诚然AJAX要好得多。

2、刷新下载数据大小问题
META和隐藏框架是同步刷新,有用的没用的数据都得同步从服务器上再下一遍。AJAX只送出需要的查询下载需要的内容,数据量开销可以控制到很小。

3、数据存放形式问题
用数据库、内存表还是文件?数据表的话需要组织出未处理的条目形成一个视图(否则从N多数据中查询未被处理的几条,开销要考虑的。),内存表需要建一个(未处理条目)新表,用文件(XML会不会更好一点)则可以拎出未被处理的数据。个人认为以文件的形式要好一点。

BTW:俺水平有限,不敢班门弄斧,不过楼的的解决方案无疑是非常实用和优秀的。

作者: ct_174880859   发布时间: 2008-01-17

支持了,谢谢

作者: 啊我好帅   发布时间: 2008-01-17

不错 支持一下
收藏了

作者: enjoyxp   发布时间: 2008-01-17

强顶

作者: qai41   发布时间: 2008-01-20

把8页都看完了。。
楼主的方法明显好于使用mysql 原因?
1。使用文本文件不需经过apache->php的加载,这一点非常重要,你们看看进程的内存消耗就明白php 动辄10M的内存是怎么没有的
2。使用mysql无论是内存表,还是i/o表,都需要使用php+mysql socket ,一次socket的消耗自己测一下就知道了,这都还不用谈到sql的执行(这点我倒是相信数据库比ext速度快)
3。谁说文件就无法使用内存?/dev/shm 干嘛用的?开动一下脑筋吗!
4。并发真的非常大可以考虑另外使用一个轻型的HTTP服务器,比如lighthttp

还有,一个思路得诞生,可能在低并发下没有用,但是,楼主可以考虑到高并发的某些需求,只能说思路更超前,程序人员开发程序的时候要眼光远一些!

作者: eltonto   发布时间: 2008-01-30

引用:
原帖由 xuer 于 2007-11-25 22:18 发表
作者:月影  2007-11-25 于昆明
关键字 B/S信息实时提示 Ajax
当远程用户下新订单的时候,数据库必然产生新的记录,这时用你的服务器端程序(ASP,PHP,JSP,CGI,ASP.NET均可)去建立一个文件(如htm格式,假设名字为new.htm),里面的内容自己随心写入就行;
然后,我们客户端的Ajax每隔一定时间(如20秒,或10秒)去读取上面建立的新文件new.htm ,如果发现这个文件的内容不为空,则表明有新订单生产,于弹出一个对话框,提示操作员“有新订单”之类的消息,于是,操作员便可以对这些订单处理。
当操作员处理完这些订单的时候,这里,就是没有新订单了,那么服务器端程序这里将上面的文件new.htm 内容清空。OK ,这时,如果没有新订单,客户端将永远不会有提示。
让AJAX定时去读一个文件,虽然这时是减少的数据库操作,我觉得可以会有如下的问题产生:

   [1] 如果同时有几个人下订单,同时对一个标志文件进行修改操作,会操作失败;
   [2] 如果客户还有知道这时有几个新订单,当然也可以写在那个标志文件里。但是需要客户端JS分析。
   [3] 处理完订单了,那么这个订单就不是新订单了,这时又需要去清空该标志文章,这这个时候,如果还有其它新的订单,没有办法判断。
   ……

   我觉得 还是以AJAX直接返回数据新记录条数,这样虽然是操作了数据库了,但是流程应该会更清楚一些。

   以上只是个人看法,抛砖引玉。

作者: semirmyway   发布时间: 2008-02-01

发邮件提醒怎么样?

作者: 七月十五   发布时间: 2008-02-02

感觉不好

作者: analyzer   发布时间: 2008-02-07

引用:
原帖由 xuer 于 2007-12-11 21:47 发表


读数据库就不用I/o操作了吗?,简直是无稽之谈,读数据库的过程就是:查询数据库+重新加载页面,重新加载页面,肯定得读页面文件对吧?读页面文件肯定就有I/O操作,对吧?那你怎么解释?
我不敢承认你错,但是 ...
[1] 如果同时有几个人下订单,同时对一个标志文件进行修改操作,会操作失败;
   [2] 如果客户还有知道这时有几个新订单,当然也可以写在那个标志文件里。但是需要客户端JS分析。
   [3] 处理完订单了,那么这个订单就不是新订单了,这时又需要去清空该标志文章,这这个时候,如果还有其它新的订单,没有办法判断。

[ 本帖最后由 fearwall 于 2008-2-29 03:52 编辑 ]

作者: liuguoqing   发布时间: 2008-02-21

引用:
原帖由 fearwall 于 2008-2-29 03:43 发表


  [1] 如果同时有几个人下订单,同时对一个标志文件进行修改操作,会操作失败;
   [2] 如果客户还有知道这时有几个新订单,当然也可以写在那个标志文件里。但是需要客户端JS分析。
   [3] 处理完订单了,那么 ...
1 3 问题,可以用文件锁和等待轮训,当然也可以抛弃,因为,当文件有锁的时候放弃操作并不是不可行的。

2。这个问题非常简单,作为通知文件,他仅仅用于标识数据库增量问题,至于具体内容,实际读取就行,这并不影响性能

作者: jzlacky   发布时间: 2008-02-24

很好的例子,感谢lz分享

作者: alxj   发布时间: 2008-02-24

学习了,谢谢

作者: robinfu   发布时间: 2008-02-28

好文章  说啥也得支持一下~~~

作者: joymenu   发布时间: 2008-02-28

在顶一回不算多

作者: fearwall   发布时间: 2008-02-29

我还顶

作者: fearwall   发布时间: 2008-02-29

学习下

作者: alxj   发布时间: 2008-03-01

看讨论很有收获,多谢大家

作者: 二进制   发布时间: 2008-03-02

说得很清楚!

作者: opmetic   发布时间: 2008-03-02

有异意的大虾们。拿出实例来说话啊。技术共享嘛
不要动不动就。你这XXX我以前做过XXX。。。。

作者: siasford   发布时间: 2008-03-02

收藏了。谢谢楼主哦

作者: siasford   发布时间: 2008-03-02

高人。

作者: siasford   发布时间: 2008-03-02

有点意思

作者: hahajohn   发布时间: 2008-03-05

学习啊 AJAX

作者: yesin   发布时间: 2008-03-05

顶一下

作者: cmttp   发布时间: 2008-03-06

引用:
原帖由 aoreal 于 2007-11-28 14:26 发表
思路很好,但如果用户量非常大,有可能会比你直接用数据库更造成服务器负担。
直接放内存里就行了。这样的标志性的东西不会占据太多空间。

作者: shher   发布时间: 2008-03-07

学习了,不错.

作者: yuanjing_119   发布时间: 2008-03-10

方法挺好,不过75楼说的很有道理,还有蛮多需要解决的问题。

[ 本帖最后由 musicdu 于 2008-3-29 16:25 编辑 ]

作者: muyouyou   发布时间: 2008-03-11

引用:
原帖由 xuer 于 2007-12-16 02:17 发表
还是麻烦楼上的仁兄给个例子吧,否则,我实在不敢苛同你的观点!-----我不能同意你说的每一个字,但是我誓死捍卫你说话的权力!

毛主席教导我们: 实践是检验真理的唯一标准,那么,你做出个例子来,再说明你的正确

我目 ...
我觉得应该一分为二,如果数据库不大的情况,二者效率应该差不多。
数据库很大的情况,你这个就比较快。

作者: taohui   发布时间: 2008-03-11

在php文件中保留纪录条数
然后用ajax读取表中纪录条数
两者想比较 怎么样啊

作者: kissweb   发布时间: 2008-03-14

支持一下。

作者: xiyuanwzq   发布时间: 2008-03-15

支持下~~学习

作者: 我要读书网   发布时间: 2008-03-28

收藏了,学习一下

作者: dongdonga   发布时间: 2008-03-29

原来月影是这里的人啊!叹……

作者: musicdu   发布时间: 2008-03-29

好 东西,我 研究 了

作者: wangcong83   发布时间: 2008-04-04

收藏了!谢了!!

作者: tmsj008   发布时间: 2008-04-09

好,学习一下

作者: lxydyx   发布时间: 2008-04-10

我看到不如在表单提交的时候用ajax调用后台的处理程序,按照原理这个程序肯定是即时调用的,那么也能即时显示信息~

作者: yufenglx   发布时间: 2008-04-10

作者: c321net   发布时间: 2008-04-10

如何下载源码呢

作者: haigang20000   发布时间: 2011-01-22

好东西啊啊 定了

作者: jzhwin   发布时间: 2011-04-25

怎么下载不了了?

作者: andyshao   发布时间: 2011-05-26

热门下载

更多