2013-06-03 125 views
7

是否可以讓服務器向所有連接的客戶端發送消息,而無需等待任何操作?讓我解釋一下:-)我一直在閱讀docs/examples,我沒有發現任何滿足我需求的東西:流程總是一樣的;一個客戶端連接(例如:一個GET調用Rest API),連接是懸而未決的,直到接收到一個新的API調用(例如POST調用),服務器只是等待(至少這是我所理解的)。我的用例非常不同:我希望服務器在新數據可用時發送一些「通知」。這將是我的使用情況(很simplifed):Atmosphere Jersey - 服務器消息

  1. 客戶端A連接到服務器
  2. 連接被暫停,因爲沒有新的數據可在瞬間
  3. 服務器得到通知,新的數據可以從一個外部 源,並將其廣播到客戶端A
  4. 轉到步驟2

我所取得的成就迄今越來越成功建立連接。下一步是解決這個服務器問題。我必須說這項技術對我來說是全新的,所以我可能會誤解某些事情是有效的。如果是這樣的話,讓我知道!

這是我的籌碼:

  • 春3.2.0發佈
  • 澤西1.8
  • 氣氛新澤西1.0.13
  • 的Tomcat 7.0.40

謝謝大家提前!

UPDATE:以下this後,我得到這樣的警告,我不知道如何擺脫:

2013-06-04 09:40:36,284 WARN [org.atmosphere.cpr.AtmosphereFramework] - Failed using comet support: org.atmosphere.container.Tomcat7AsyncSupportWithWebSocket, error: Tomcat failed to detect this is a Comet application because context.xml is missing or the Http11NioProtocol Connector is not enabled. 
If that's not the case, you can also remove META-INF/context.xml and WEB-INF/lib/atmosphere-compat-tomcat.jar Is the Nio or Apr Connector enabled? 
2013-06-04 09:40:36,285 WARN [org.atmosphere.cpr.AtmosphereFramework] - Using org.atmosphere.container.Tomcat7BIOSupportWithWebSocket 

我跟着應用程序結構評論here,所以這不應該是一個問題。我已經注意到通過改變傳輸到「websocket」而不是「long-polling」顯示沒有錯誤。服務器終於發送數據困難:)

回答

0

我跟着你的鏈接,並修改了一些代碼。

當你在步驟3 「服務器得到通知,新的數據可以從外部源,並將其廣播到客戶端A」,你必須寫這樣一行:

BroadcasterFactory.getDefault().lookup("/*").broadcast(response); 

起初,我使用從我的ActiveMQ隊列收到的TextMessage,但我得到這個錯誤,所以我用一個Jackson類作爲對象響應,一切正常。

重度:消息正文寫入器,用於Java類org.apache.activemq.command.ActiveMQTextMessage和Java類型的類org.apache.activemq.command.ActiveMQTextMessage,和MIME媒體類型application/JSON未找到 jun 03,2014 11:32:21 AM com.sun.jersey.spi.container。ContainerResponse寫 嚴重:註冊郵件正文作家與MIME媒體類型兼容是: 應用/ JSON(JSONJAXBElementProvider,JSONArrayProvider,JSONObjectProvider,JSONRootElementProvider,JSONListElementProvider,...)