[英]Duplex streaming in Java EE
我正在尋找使用Java EE的全雙工流解決方案。
情況:客戶端應用程序(JavaFX)從外圍設備讀取數據。 這些數據需要近乎實時地傳輸到服務器進行處理,並且異步地獲得響應,同時它不斷發送新數據進行處理。
與服務器的通信需要盡可能低的開銷。 進入的數據基本上是一些傳感器數據,並且在處理之后它被轉入可以被描述為一組命令。
我調查了什么:
現在我想測試我的方法#2的性能。 第一個解決方案肯定會起作用,但我不太喜歡擁有一個單獨的服務器(在Tomcat旁邊,我已經運行了一些東西)。
然而,同時,值得知道是否有任何其他Java特定(EE或非)技術可以輕松解決這個問題。 如果有人有想法,請分享。
這看起來像是使用JMS的好地方。 您可能會使用Message-Driven Beans而不是無狀態EJB。
這為您提供了類似於第一個解決方案的方法,使用兩個消息隊列而不是TCP / IP連接。 JMS使您的通信完全異步,並且在您的客戶端可以盡可能快地發送消息的意義上是低開銷,而不管服務器使用它們的速度有多快。 您還可以獲得交付保證和其他JMS善良。
你可以嘗試很多選擇。 適當的解決方案取決於應用程序的性質,通信協議,數據傳輸類型,對客戶端和服務器的控制以及客戶端服務器路由上的防火牆限制。
在您的問題中沒有太多關於此的信息,但鑒於您提供的內容,您可能希望看看netty,因為它非常通用且靈活,似乎符合您的要求。 Netty還包括雙工websocket實現。 請注意,基於netty的解決方案實現起來可能更復雜,並且需要比其他一些解決方案(例如jms)更多的背景研究。
GraniteDS中的另一個可能的解決方案,它宣傳JavaFX客戶端集成和多服務器集成以進行全雙工客戶端/服務器通信,盡管我還沒有使用它。 GraniteDS使用Comet(您的兩個具有長輪詢模型的異步servlet)和您可能熟悉的Flex / Flash數據的Active Message Format。
你看過websockets作為解決方案嗎? 眾所周知,它們會保持持久連接,因此異步響應會很快。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.