[請益] sleep會浪費系統效能嗎?

看板PHP作者 (可倫)時間13年前 (2010/11/23 20:44), 編輯推噓0(0045)
留言45則, 4人參與, 最新討論串1/1
最近在設想一個情況(實際上有遇到) 如果在做多人系統,或是在處理檔案上傳,但是是採用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

11/24 02:54, , 1F
你確定文章裡面 server-side 跟 client-side 的角色沒搞錯?
11/24 02:54, 1F

11/24 11:35, , 2F
應該沒有吧@@" 我希望透過把回應滯留在主機上久一點
11/24 11:35, 2F

11/24 11:35, , 3F
節省重複執行request,只是不知道這樣會不會佔據太多
11/24 11:35, 3F

11/24 11:35, , 4F
server記憶體,簡單的說就是這樣@@"
11/24 11:35, 4F

11/24 13:03, , 5F
放在session不就結了。
11/24 13:03, 5F

11/24 13:21, , 6F
但是假設有一個上傳會處理5分鐘
11/24 13:21, 6F

11/24 13:21, , 7F
當然上傳檔案結束之後可以修改session確定上傳結束
11/24 13:21, 7F

11/24 13:22, , 8F
但在過程中,為了避免不換頁,查詢這個session的PHP
11/24 13:22, 8F

11/24 13:22, , 9F
該讓他每一分鐘sleep一次,定期檢查,最後回傳結果
11/24 13:22, 9F

11/24 13:23, , 10F
還是每一分鐘送一次request會比較合適呢?
11/24 13:23, 10F

11/24 13:23, , 11F
兩者差別在要不要讓這個thread(可能用這樣想)在主機
11/24 13:23, 11F

11/24 13:23, , 12F
端活5分鐘,一個是每一分鐘製造一個分身去查一次
11/24 13:23, 12F

11/24 13:24, , 13F
上傳檔案時間是固定的,或許還可以預測,但是異地編輯
11/24 13:24, 13F

11/24 13:24, , 14F
如果妹一分鐘送一次無謂的request只是要確定檔案能不能
11/24 13:24, 14F

11/24 13:24, , 15F
用的話,我就不知道哪一種比較好了,所以才想問的@@"
11/24 13:24, 15F

11/24 21:21, , 16F
…那這實在很複雜。
11/24 21:21, 16F

11/24 21:43, , 17F
搞不懂為啥要用ajax監測檔案上傳,你是用什麼方式上傳
11/24 21:43, 17F

11/24 21:44, , 18F
檔案還可以監測@@? 另外問一下你怎麼監測檔案上傳?
11/24 21:44, 18F

11/24 21:47, , 19F
因為要取得檔案上傳進度啊@@"
11/24 21:47, 19F

11/24 21:47, , 20F
喔我的方法我之前有說,有人有做出和我類似的方法
11/24 21:47, 20F

11/24 21:50, , 21F
11/24 21:50, 21F

11/24 21:57, , 22F
你給他sleep那不是就只有判斷是否傳完而以?
11/24 21:57, 22F

11/24 21:57, , 23F
沒有很仔細看那個東西,不過應該也是用ajax做上傳動作吧
11/24 21:57, 23F

11/24 21:58, , 24F
給個complete的callback不就解決了
11/24 21:58, 24F

11/24 22:01, , 25F
恩,可是這那張sleep的網頁本身就是在監測某一個session
11/24 22:01, 25F

11/24 22:01, , 26F
(flag)完成與否,所以完成的時候就代表上傳結束了
11/24 22:01, 26F

11/24 22:01, , 27F
喔喔因為我目前用的方法是把表單給POST到一個200的頁面
11/24 22:01, 27F

11/24 22:02, , 28F
所以那個頁面自己不可以有結果回傳@@" 不知道有沒有
11/24 22:02, 28F

11/24 22:02, , 29F
其他方法@@"
11/24 22:02, 29F

11/24 22:07, , 30F
感覺這個方法還蠻妙的@@ 不過我通常是用flash來傳多個
11/24 22:07, 30F

11/24 22:07, , 31F
檔,還能取得即時進度
11/24 22:07, 31F

11/24 22:08, , 32F
恩,那時候我預設是在不依靠其他的外掛情況下做XD
11/24 22:08, 32F

11/24 22:08, , 33F
不然我現在會願意用silverlight或是HTML5 XD
11/24 22:08, 33F

11/24 22:09, , 34F
也因此我才在想要每隔幾秒送一次request還是先hold住
11/24 22:09, 34F

11/24 22:09, , 35F
也是類似你說的callback啦,只是我不知道一個request在
11/24 22:09, 35F

11/24 22:09, , 36F
server hold太久會怎麼樣Orz
11/24 22:09, 36F

11/24 22:17, , 37F
不是很清楚你詳細的作法,不過我猜應該是一個form傳多個
11/24 22:17, 37F

11/24 22:19, , 38F
檔案,如果是一個form傳一個檔,用javascript跑就可以抓
11/24 22:19, 38F

11/24 22:20, , 39F
到每個form結束的點了吧?
11/24 22:20, 39F

11/24 22:23, , 40F
但是不能用javascript上傳檔案啊,一定要觸發FORM的
11/24 22:23, 40F

11/24 22:26, , 41F
submit之後,Server端才會收到POST和FILE @@"
11/24 22:26, 41F

11/24 23:15, , 42F
但是javascript可以改form的內容,也可以做form submit
11/24 23:15, 42F

11/25 09:26, , 43F
我和你的講法是一樣的,但是如果POST的目標是200的網頁
11/25 09:26, 43F

11/25 09:26, , 44F
200- no content,所以根本沒有回傳值
11/25 09:26, 44F

11/25 09:26, , 45F
javascript也無法取的這個表單到底處理完了沒...
11/25 09:26, 45F
文章代碼(AID): #1CwxSJ1U (PHP)