2014-03-06 46 views
1

我不是看特定的答案,只是一個想法或提示。 我有以下問題:僞裝成同步的異步websocket機制

Android應用程序是Web服務的客戶端。它有一個線程,它通過http協議發送事件(帶有請求ID的XML表單),並且爲每個請求服務器發送確認,他理解具有授予事件ID的消息權限 - 服務器是少數客戶端的同步器。我想使用websocket協議通過websocket發送事件,但它有點棘手 - 而不是http,我不希望得到每個請求的響應。而且,傳入的websocket消息在其他線程中被解析。主要機制有點過度,我不想從頭開始寫所有東西。

我想使這個異步websocket機制僞裝成同步。 現在我的想法 - 通過websocket發送事件之後,我將不再等待例如5秒的響應,這將在其他線程中處理(它以XML的形式處理),並且關於太請求ID,它會通知適當的暫停線程。我擔心Condition.await()和condition.signal不是最好的想法,你覺得呢?

根據這個問題,我已經意識到,我有項目這種機制的問題。你有沒有想法,我在哪裏可以找到有關良好模式和技巧的信息,這些信息現在可以避免不好的做法?提前致謝!

回答

0

websocket和HTTP請求之間的唯一區別在於消息進入時缺少HTTP頭。在websocket中,您有一個心跳使得連接保持活動狀態並允許全雙工通信,然後您擁有純淨的有效載荷。您需要找到哪些郵件頭將用於在服務器/客戶端正確路由請求。

因此,這不會阻止您通過在接收後立即寫入輸出流而以請求/響應方式進行通信。我建議你去看看RFC

https://tools.ietf.org/html/rfc6455

如果你是一個小更直觀,此幻燈片可以幫助:

http://www.slideshare.net/sergialmar/websockets-with-spring-4

或者,如果你想要一些更嚴重的實現作爲一個例子,看看春天的文檔:

http://docs.spring.io/spring/docs/current/spring-framework-reference/html/websocket.html

+0

謝謝你給我關於Websocket的一些很好的信息 - 我已經理解錯了。 不幸的是,我無法改變服務器對我的請求的反應方式,所以我想如果服務器將響應作爲單獨請求發送,或者以任何方式連接,我都沒有影響。鏈接請求和響應的主要問題是比較requestID,我可以在將請求解析爲XML表單之前進行檢查,並在解開XML表單的響應之後進行檢查。 這是一個有點複雜,但我會嘗試處理上層的請求/響應機制比消息通過websocket發送。 順便說一句 –