2012-02-10 144 views
3

我試圖將數據從服務器直接推送到客戶端的php網頁。我已經多次搜索這個問題,我不想使用ajax push引擎或其他東西,如cometD(如果你知道我在說什麼)。我想知道是否有任何方法將程序放在我的服務器上,以便將數據發送到所有連接的客戶端。我寧願這是用c或C++或c#來完成的,我可以自己編寫它,我只是想如果它是可能的和如何。C http服務器編程

+3

如果你想用HTTP來做到這一點,那麼只有兩個選項是輪詢或彗星。儘管你可以用任何語言來實現它們中的任何一個。 – Flexo 2012-02-10 18:40:53

回答

1

也許你沒有得到HTTP協議的工作方式。你應該首先記錄下你自己。我會盡力解釋如何使用它爲您的情況:

  • 輪詢:每X秒,客戶端將請求一個網頁與你想要的內容。這是使用HTTP的標準方式:客戶端發送GET,服務器發送響應。

  • :每個客戶端都會請求一個網頁,但服務器會實際等待您發送消息。您可以使用此HTTP通道「推」的數據:客戶端發送一個GET,服務器等到他有一個響應發送

正如你看到的,我不是在談論任何語言實現,只是關於HTTP協議如何偏離你想做的事情。 Push方法的壞處在於,即使客戶端處於空閒狀態,您也將爲X客戶端打開X套接字。使用Pull方法時不會發生這種情況,發送響應時套接字會關閉。

現在,如果你想這樣做,你需要從客戶端開始連接。這就是「Ajax」的部分可能是有用的,讓我們在看的jQuery:

$.get('/wait_for_message', function(data) { 
    alert('My server send:' + data); 
}) 

您的服務器將有一個GET /wait_for_message HTTP/1.1請求。您可以將此套接字保存在「等待某個東西的客戶端」列表中,而不是發回數據。然後,當需要時,您可以遍歷這個列表,將數據寫入所有套接字,並且tada:所有客戶端都將接收數據。

現在這種機制並不容易做到,這就是爲什麼您可以像其他人一樣使用其他項目的原因。

0

您可以使用任何語言編寫/修改一個非常簡單的Web服務器,以格式化和提供數據庫中的數據,甚至忽略實際請求的內容。所有你需要做的就是寫一個頭和數據到套接字。您可以通過根據某個列表主動發起連接來做同樣的事情。