作者Kelunyang (可伦)
看板PHP
标题[请益] sleep会浪费系统效能吗?
时间Tue Nov 23 20:43:59 2010
最近在设想一个情况(实际上有遇到)
如果在做多人系统,或是在处理档案上传,但是是采用POST到一张会发出HTTP 200
的页面时,目前小弟的做法是每三十秒或一分钟送一次ajax request,确认档案
是不是已经上传了
但是这样一来,request会有很多浪费在过程中,後来我发现如果在监测档案上传
的PHP中加入sleep()的话,可以延长时间,就不用送这麽多request
现在小弟的问题是,有没有可能让PHP进入sleep之後,定期的起床一下检查
Server端到底处理完了没,都完成了,再把这个http request给回应,这样
应该可以节省很多无谓的ajax request吧
只是把一个request给hold在server,我知道我可以透过set_time_limit()延长
单一PHP的执行时间,只是我不确定这样有没有可能让档案执行太久被Server卡掉
然後这样做会比原先那种定情送request的方式还占主机的记忆体吗@@"
不知道各位前辈的看法如何?
P.S.
这样好像有点类似Bus的处理方法,可是PHP-DBUS还在测试中,所以想先用这样
处理,另外就是就档案上传来说,可能送多个request是没差,但是如果做多人系统
为了防止单一档案被其他人修改,总不能一直送无谓的request,只是为了侦测
这个档案是不是刚好被其他人开启了吧...感觉整个就很浪费资源
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 114.36.34.246
1F:→ xam:你确定文章里面 server-side 跟 client-side 的角色没搞错? 11/24 02:54
2F:→ Kelunyang:应该没有吧@@" 我希望透过把回应滞留在主机上久一点 11/24 11:35
3F:→ Kelunyang:节省重复执行request,只是不知道这样会不会占据太多 11/24 11:35
4F:→ Kelunyang:server记忆体,简单的说就是这样@@" 11/24 11:35
5F:→ MOONRAKER:放在session不就结了。 11/24 13:03
6F:→ Kelunyang:但是假设有一个上传会处理5分钟 11/24 13:21
7F:→ Kelunyang:当然上传档案结束之後可以修改session确定上传结束 11/24 13:21
8F:→ Kelunyang:但在过程中,为了避免不换页,查询这个session的PHP 11/24 13:22
9F:→ Kelunyang:该让他每一分钟sleep一次,定期检查,最後回传结果 11/24 13:22
10F:→ Kelunyang:还是每一分钟送一次request会比较合适呢? 11/24 13:23
11F:→ Kelunyang:两者差别在要不要让这个thread(可能用这样想)在主机 11/24 13:23
12F:→ Kelunyang:端活5分钟,一个是每一分钟制造一个分身去查一次 11/24 13:23
13F:→ Kelunyang:上传档案时间是固定的,或许还可以预测,但是异地编辑 11/24 13:24
14F:→ Kelunyang:如果妹一分钟送一次无谓的request只是要确定档案能不能 11/24 13:24
15F:→ Kelunyang:用的话,我就不知道哪一种比较好了,所以才想问的@@" 11/24 13:24
16F:→ MOONRAKER:…那这实在很复杂。 11/24 21:21
17F:→ guancheng:搞不懂为啥要用ajax监测档案上传,你是用什麽方式上传 11/24 21:43
18F:→ guancheng:档案还可以监测@@? 另外问一下你怎麽监测档案上传? 11/24 21:44
19F:→ Kelunyang:因为要取得档案上传进度啊@@" 11/24 21:47
20F:→ Kelunyang:喔我的方法我之前有说,有人有做出和我类似的方法 11/24 21:47
22F:→ guancheng:你给他sleep那不是就只有判断是否传完而以? 11/24 21:57
23F:→ guancheng:没有很仔细看那个东西,不过应该也是用ajax做上传动作吧 11/24 21:57
24F:→ guancheng:给个complete的callback不就解决了 11/24 21:58
25F:→ Kelunyang:恩,可是这那张sleep的网页本身就是在监测某一个session 11/24 22:01
26F:→ Kelunyang:(flag)完成与否,所以完成的时候就代表上传结束了 11/24 22:01
27F:→ Kelunyang:喔喔因为我目前用的方法是把表单给POST到一个200的页面 11/24 22:01
28F:→ Kelunyang:所以那个页面自己不可以有结果回传@@" 不知道有没有 11/24 22:02
29F:→ Kelunyang:其他方法@@" 11/24 22:02
30F:→ guancheng:感觉这个方法还蛮妙的@@ 不过我通常是用flash来传多个 11/24 22:07
31F:→ guancheng:档,还能取得即时进度 11/24 22:07
32F:→ Kelunyang:恩,那时候我预设是在不依靠其他的外挂情况下做XD 11/24 22:08
33F:→ Kelunyang:不然我现在会愿意用silverlight或是HTML5 XD 11/24 22:08
34F:→ Kelunyang:也因此我才在想要每隔几秒送一次request还是先hold住 11/24 22:09
35F:→ Kelunyang:也是类似你说的callback啦,只是我不知道一个request在 11/24 22:09
36F:→ Kelunyang:server hold太久会怎麽样Orz 11/24 22:09
37F:→ guancheng:不是很清楚你详细的作法,不过我猜应该是一个form传多个 11/24 22:17
38F:→ guancheng:档案,如果是一个form传一个档,用javascript跑就可以抓 11/24 22:19
39F:→ guancheng:到每个form结束的点了吧? 11/24 22:20
40F:→ Kelunyang:但是不能用javascript上传档案啊,一定要触发FORM的 11/24 22:23
41F:→ Kelunyang:submit之後,Server端才会收到POST和FILE @@" 11/24 22:26
42F:→ guancheng:但是javascript可以改form的内容,也可以做form submit 11/24 23:15
43F:→ Kelunyang:我和你的讲法是一样的,但是如果POST的目标是200的网页 11/25 09:26
44F:→ Kelunyang:200- no content,所以根本没有回传值 11/25 09:26
45F:→ Kelunyang:javascript也无法取的这个表单到底处理完了没... 11/25 09:26