首先,我想感謝大家,對於新程序員的幫助很大。這是長輪詢的正確方法(Comet編程)
我有一個長輪詢的問題。我研究了一些關於彗星編程的長輪詢技術。該方法對我來說似乎很難,因爲它有時還需要在服務器端安裝一些腳本。
現在我找到了一個長輪詢的例子。它的工作很好,但我不確定它是否是正確的方法。示例腳本是關於類似聊天的應用程序。這個PHP腳本的工作原理如下:
- php腳本不斷檢查data.txt文件,直到它被更改。
- 只要更改data.txt,新文本就會輸出到網頁上。
下面是PHP腳本:
<?php
$filename = dirname(__FILE__).'/data.txt';
// store new message in the file
$msg = isset($_GET['msg']) ? $_GET['msg'] : '';
if ($msg != '')
{
file_put_contents($filename,$msg);
die();
}
// infinite loop until the data file is not modified
$lastmodif = isset($_GET['timestamp']) ? $_GET['timestamp'] : 0;
$currentmodif = filemtime($filename);
while ($currentmodif <= $lastmodif) // check if the data file has been modified
{
usleep(500000); // sleep 500ms to unload the CPU
clearstatcache();
$currentmodif = filemtime($filename);
}
// return a json array
$response = array();
$response['msg'] = file_get_contents($filename);
$response['timestamp'] = $currentmodif;
echo json_encode($response);
flush();
?>
我不包括網頁代碼保持簡單的問題。該網頁只有一個div,它顯示data.txt的文本,只要它被更改。我的問題的
要點是:
- 這是循環法適當的方法來長輪詢服務器?
- 此外,當服務器正在執行
sleep();
其他同時發生的請求會發生什麼情況? - 是否有任何技術來減少由於長時間輪詢的連續腳本的服務器負載?
- 如果客戶端啓動這個長輪詢請求斷開連接,我們如何才能知道並停止相應的斷開客戶端的腳本?
請指導我這個問題...謝謝
感謝您的答覆的專用服務器。延遲實際上是500毫秒,即0.5秒。請注意,只要客戶端瀏覽器打開該頁面,該腳本就會開始執行檢查和更新程序。如果有例如1000個客戶端瀏覽器同時打開,服務器必須連續發送響應。我們如何檢查php腳本中是否有任何客戶端斷開連接,並停止腳本以保持腳本對所有其他在線客戶端開放。請解釋一下 –
還在等待你的回覆(因爲看起來這裏只有少數人知道長時間輪詢,爲什麼我沒有得到任何答案)。請與我分享您的longpoll技術。我會非常感激。我們如何檢查php腳本中是否有任何客戶端斷開連接,並停止腳本以保持腳本對所有其他在線客戶端開放。請幫忙! –
我已經在我的問題中添加了一些解釋,請回顧一下 –