2010-11-18 42 views
10

我剛開始看jQuery;直到現在一切都是PHP。JQuery&PHP - 我可以從服務器推送嗎?

只是好奇:如果服務器檢測到一個事件,並希望更新用戶的瀏覽器,我可以做服務器推送,或客戶端不得不輪詢?

+1

目前沒有可靠的推送方法。看看長輪詢。 – jwueller 2010-11-18 04:01:27

+0

加1。謝謝 – Mawg 2010-11-18 05:57:12

回答

12

客戶端必須進行輪詢,但可以執行long polling,即保持請求活動直到服務器有推回的事件(即完成請求)。

否則,您可以使用Web套接字。

+0

這次得到了我。該死! +1 :) – 2010-11-18 04:01:27

+0

@Jacob Relkin哈哈,終於! – alex 2010-11-18 04:01:48

+0

+1但是......有些競爭對手,夥計? :-) – Mawg 2010-11-18 05:57:52

3

你可以讓客戶端使用像彗星等長輪詢機制,但沒有辦法真正「推」。

+0

PHP中的websockets怎麼樣? – 2012-06-17 13:54:11

3

您可以使用「彗星」來做到這一點。不過,PHP對Comet來說是一種糟糕的語言。在PHP中使用Comet的一種比較流行的技術就是長時間輪詢。

長查詢的想法是創建一個AJAX請求到服務器。服務器接受連接但不響應(即:while循環,其中有sleep(1)),直到發生事件。這可能是秒,分鐘等。

但是,爲了讓長輪詢「工作」,您必須確保連接不會很快超時,因此請將執行時間設置得很高(如果可能的話,分鐘或無限)。您還需要在處理服務器斷開連接/超時的客戶端上編寫代碼。當發生這種情況時,應該開始一個新的請求。

希望這會有所幫助!

+0

+1非常感謝您提供豐富而詳細的答案。 「用PHP做彗星是一種可怕的語言」 - 你有什麼建議? – Mawg 2010-11-18 05:58:57

3

這不是真的太相關jquery,而是Http本身。

這基本上是不可能的服務器推送什麼客戶端主動,兩個可能的解決方案是:

  1. 保持HTTP連接而不將其關閉。

  2. 輪詢

+0

加1。謝謝 – Mawg 2010-11-18 06:00:12

5

HTTP協議工作於請求 - 響應原理,這意味着 服務器只能產生以下從 客戶端的請求的響應。這意味着服務器不能發送響應到 客戶端沒有收到請求擺在首位。這是 不是PHP的問題,它是一個HTTP問題。所以不,你不能推,客戶必須提出要求,或民意調查。正如亞歷克斯所建議的,你可以看看長輪詢。

+0

+1好點;無論使用哪種編程語言,它都是HTTP – Mawg 2010-11-18 05:59:39