2011-08-05 61 views
6

假設我正在同步HTML頁上的文本,存儲在localStorage中,從計算機A到計算機B.當用戶編輯計算機A上的文本時,我向服務器發送一個請求,並告訴它哪些文本已更改。有沒有什麼辦法可以讓服務器告訴計算機B有新文本,而計算機B不得不繼續檢查?我讀過關於Comet的書,但我試圖不使用任何庫。有沒有辦法?另外,如果你打算推薦Comet,你能否用簡單的JavaScript和Comet來舉個簡單的例子?如何使用長輪詢(最好不使用Comet或node.js)?

我有一個想法,但我不知道它是否會工作。在計算機B上,我發送一次請求,讓服務器的文件繼續延遲響應,直到出現一些新的文本。那樣的話,就像長輪詢一樣,但是請求最終會超時。如果有一種方法可以將超時設置爲從不,那麼這將變得更容易。那麼,任何人有任何想法?

P.S.-我只想使用JavaScript和PHP,並嘗試避免使用庫。不過,如果你知道一個庫可以用JS和PHP來做到這一點,請告訴我。

此外,我知道有這樣的問題,但我在那裏找到的答案並不令人滿意。

哦,如果有人知道這裏的聊天是如何工作的,你能告訴我嗎? dr:我想從服務器發送一個請求到一個HTML頁面,或者讓HTML發送一個保持活動狀態的請求,直到創建一個適當的響應爲止。

+0

這取決於你使用HTML5嗎?如果是這樣,您可以使用原始套接字與每個客戶端的服務器建立連接,如果沒有,則必須讓消費者(計算機b)持續檢查更新。另外,這是生產場所,學校項目還是個人項目?它在你如何去做它有所不同:) – jdarling

+0

我使用HTML5(正如我所說我使用localStorage。:))。這是一個個人項目。其實Chrome擴展,所以我需要它是可靠的。 –

+0

由於使用Flash hacks和增加了「localStorage」的實現,所以我沒有做出這個假設:)。這裏有幾個可能對你有用的鏈接; http://www.phpclasses.org/package/3213-PHP-Web-based-chat-using-AJAX-to-update-the-dialog.html和http://www.ibm.com/developerworks/web/ library/x-ajaxxml8/index.html?ca = drs- 這些包含基本「聊天」應用程序的PHP,MySQL和Ajax。應該是一個很好的起點。 – jdarling

回答

2

彗星是一個長輪詢的實現。

問題是主機需要保留所有打開的請求的所有資源。必須仔細配置服務器,以使其在負載下順利運行。這不是一個「開箱即用」的解決方案。

另一個缺點是每個用戶都必須綁定到特定的服務器 - 所以沒有簡單的方法來平衡請求負載。

堅持定期輪詢往往是最好的選擇。

+0

好的。那麼,有什麼方法可以動態檢測輪詢時間應該多長時間?或者我只需要使它成爲一個固定的? –

+0

因爲涉及到很多服務器設置,所以我從來沒有打擾過實施Comet。請參閱:http://stackoverflow.com/questions/603201/using-comet-with-php –