[英]PHP while(true) loop for file updates
我手頭有以下問題:
我在兩個單獨的頁面上有用戶,但是將頁面輸入保存到相同的文本文件中。 當一個用戶正在編輯時,另一用戶則不能。 我通過會話來跟蹤此問題並編寫更改,現在是誰來編輯它在文件中。
到目前為止,一切正常,最終的輸出與聊天非常相似。 但是,現在我正在讓用戶手動實現其頁面並重新加載文件。 我想做的是在文件時間戳更改時讓頁面執行重定向(以指示最后一個用戶已經保存了他們的編輯,而另一個用戶又打開了)。 我研究了javascript shortpolling一點,但隨后發現了php filmtime函數,它看起來更容易使用。 好吧-這是我得到的:
while(true){
$oldtimestamp=filemtime(msks/$session['user']['kampfnr'].txt);
$waittimer=2;
$waittimer++;
sleep($waittimer);
$newtimestamp=filemtime(msks/$session['user']['kampfnr'].txt);
if ($eintragszeit2 > $eintragszeit1){
addnav("","kampf_ms.php?op=akt");
redirect("kampf_ms.php?op=akt");
}}
從理論上講,當用戶看到輸出時,“該...開始編輯文件”。 這應該在后台循環,檢查文件是否已經更新,如果是,請重定向用戶。
實際上,這會嚴重影響服務器性能(我在共享主機上),直到由於內存超出錯誤消息而中斷。
代碼有問題嗎? 還是在這種情況下使用while循環通常不是一個好主意?
提前致謝!
PHP語言應僅用於生成Web內容(客戶端向服務器發出請求=>服務器調用所需的腳本,並將響應返回給客戶端)。 頁面加載並顯示給客戶端后,連接將關閉,因此Internet可能會死機,客戶端不會收到通知...
因此,在無限循環中,不僅客戶端可以等待響應……無限時間,而且服務器可能由於負載而受到嚴重影響……實際上,這是一個非常糟糕的主意:)
PHP不能用於進行雙向通信: 只能用來構建客戶需要的網頁,因此他不能在“后台”做任何事情 (不是直接,有效地可以調用外部腳本,而是不用於通知客戶...)
另外,由於客戶端/服務器體系結構(服務器僅響應客戶端請求,因此是被動的),因此進行雙向通信時,php和“常規” http不好用
我可以建議使用WebSocket協議來進行聊天應用程序:
但是為此,您需要使用“活動”服務器解決方案,例如node.js或ruby(取決於您的服務器功能...)
如果要保留在php中,另一種方法是,客戶端每10秒發出一次Ajax請求,例如,調用一個php腳本來檢查文件,如果文件已更新,則向客戶端發送一條消息, 但這確實是不推薦使用 ,由於嚴重的性能損失,因此請立即將其忘記。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.