2009-09-09 116 views
0

我有一種情況,我希望Java客戶端有一個雙向數據通道和一個servlet(我可以控制兩者),這樣既可以開始數據傳輸,無需等待其他人先做些事情,但要通過防火牆,需要使用http或https進行隧道傳輸。胖Java客戶端需要通過http/https雙向通信到Web服務器

我環顧四周,但我不相信我知道要求谷歌的正確條款。

我最初看的是http-tunneling模塊,但意識到我在另一端有一個web容器,我認爲合適的方法是想一個胖客戶端需要與家庭進行通信。我在想,http 1.1中的持久連接在這裏可能非常有用。我可以輕鬆地進行心跳傳輸以保持連接不受ide刺。

在這個時候,我只需要做一個概念驗證,所以我主要需要一些現在可以運行的東西,然後可以優化甚至在以後進行替換。

所以,我很感謝指向項目的指針,這些項目允許我有一個連接,任何一方都可以將信息(如序列化對象或描述性字節流)推送到另一端。如果可能的話,我更喜歡純Java。


編輯:感謝指針。看起來我所需要的將會在servlet 3.0規範中提供,我可能最終會根據它在各種Web容器中的支持時間長期使用它。

現在我正在研究Cometd軟件包,它似乎能夠完成我原型所需的工作。

回答

1

搜索詞:彗星,長輪詢

這些大多是在AJAX環境中使用,但我看不出有任何理由,你爲什麼不能在一個Java項目中使用它們。

0

它需要多快?你總是可以對客戶端進行輪詢。每隔一段時間檢查一次新郵件。

0

您可以通過HTTP使用Hessian協議。這是一個用於序列化數據的快速二進制協議。通常用於Web服務風格的RPC通信,但沒有理由不可能是雙向的 - 請參見Hessian mux。它是純Java,太:-)

0

通常這是通過讓服務器不立即響應http請求來完成的。它在發送響應之前等待一些更新(或超時)。顯然,需要注意確保服務器在負載下處理此事。

例如,參見Comet

1

請看看Eclipse的Net4J,

http://wiki.eclipse.org/Net4j

它支持所有你所提到的功能。一個很好的特性就是它支持HTTP連接池,所以你可以在客戶端和服務器之間有很多通道,但只使用一些HTTP連接。

唯一的問題是它根本沒有文檔。你只需要閱讀源代碼。一旦你弄明白了,它很容易使用。

上有老Net4J現場多了一些圖表,

http://net4j.berlios.de/

相關問題