2009-06-26 116 views
5

與服務器端推送相反,也稱爲Comet。我想知道是否可以使用長壽命的HTTP連接將信息推送到服務器。可能做客戶端HTTP推送?

與簡單XHR,連接將保持活着,數據將被傳輸到間隔服務器,在用戶完成動作等

使用標準的技術,我不相信這是可能的,但我願意提供可能的利用方式或完成此任務的巧妙方法。目的是完成低延遲的數據推送到服務器以實現快速和高效的單向流式傳輸。

由於服務跨域策略或獲取java簽名的麻煩,我對使用flash/java橋接器實現socket沒有興趣。粗暴的黑客工作,沒有額外的依賴性,是受歡迎的。優選地,解決方案將使用javascript完成。

+0

對此沒有太多的理由。由於HTTP1.1重用連接,一旦建立了第一個連接,後續連接的速度非常快;標準的AJAX技術解決了這個問題,沒有任何與維護服務器長期連接,處理連接失敗等問題有關的問題。 – jvenema 2010-02-11 19:43:23

回答

1

我曾經看到一個談話被人揹後http://orbited.org/

這是一個使用標準的技術來保持連接的服務器和你可以把東西丟下客戶端之間打開一個JS庫。

1

這可以在幾個方式之一來完成...

您可以keep a connection open做這篇文章的,或者我相信這是可以做到的多部分POST。

+0

不,絕對不一樣。 – 2009-06-26 23:54:56

+0

問題是關於發送一些數據,然後發送一些更多的數據而不開始新的HTTP請求 - 即。不只是普通的POST。 – 2009-06-26 23:55:32

+0

儘管你可以保持連接打開,並且可以執行多部分GET請求嗎?這兩種情況中的任何一種都可以正常工作。 – Nippysaurus 2009-06-26 23:58:25

1

這樣做的: http://www.speich.net/projects/programming/firebug-testing.php

,並期待在此:http://en.wikipedia.org/wiki/Comet_(programming)) 和谷歌周圍 'X - 混合替換'

做你在Firefox XHR。必須直接使用它或抓住XHR對象來設置有趣的字段。 xhr.multipart = true並使用onload處理程序,而不是onreadystatechange。

服務器應該返回mime類型爲'multipart/x-mixed-replace'的數據。加上一個多部分分隔符。刷新以獲取每個齊射的最後一個字節。我仍然試圖讓它順利。

Safari(〜= chrome)可以做到,但具體細節不同。當readyState = 3時調用你的處理程序,而不是4.每當新文本被附加到resultText時,並不是全部。在IE上無法獲取任何內容。

0

如果您正在尋找雙向瀏覽器 - 服務器通信,那麼您可能正在尋找WebSockets。請參閱維基百科文章底部的可用實現。