2016-07-05 54 views
8

我想找出使用​​akka-http和akka-streams實現真正的websocket應用程序的最佳方法。我最想找的就是簡單,我現在還沒有得到。Akka Streams Websocket配線

假設你有一個相當複雜的管道,它需要區分多個請求,有時會將請求發送給參與者進行處理,有時會發出mongo查詢並返回響應,有時會在REST API上執行PUT等。

不同於簡單的聊天應用實例在那裏,有出現至少3個問題,這似乎沒有一個標準溶液:

  • 有條件跳過響應,例如,因爲它不被預期該請求的客戶端將收到響應。如果我使用從消息到消息的典型流程,一旦請求達到目標,我需要阻止它進一步傳播回webSocket。它可以用特殊的過濾器(包括一些痛苦)或使用各種其他方式(例如,Conditionally skip flow using akka streams)來完成,但是這增加了許多樣板和複雜性。理想情況下,我希望能夠插入「跳過」消息,只是略過其他所有內容。

  • 將傳入消息路由到適當的地方(例如,演員,mongo)。再次,我可以找到涉及大量樣板的解決方案(例如,在不處理這種請求的分支機構進行廣播和過濾)。理想情況下,我應該能夠定義如下內容:如果消息是X,則發送消息,如果消息爲Y,則發送消息等。

  • 將錯誤傳播回客戶端。非常類似於上述路由問題。例如,如果JSON解析失敗,我需要添加一個單獨的路徑(廣播+合併),我發送一條錯誤消息,但如果在下一階段發生錯誤,我甚至不能輕鬆地重複使用相同的路徑,而且我想將該錯誤傳播給用戶。理想情況下,我應該有一條單獨的錯誤處理路徑,可以在流中的任意點使用,完全繞過流的其餘部分並返回給客戶端。

目前,我有這個跨越15線與路徑通過> 20個不同的階段會出奇複雜的圖形,我真的很擔心保持這種解決方案的複雜性檢查。在這個尺寸下DSL幾乎是不可讀的。我當然可以更好地進行模塊化,但是對於那些應該簡單得多的東西來說,這感覺像是一個瘋狂的麻煩。

我錯過了什麼嗎?我瘋狂考慮阿卡流這樣的任務?任何想法或代碼示例都可以讓我控制所有這些複雜性?

在此先感謝!

回答

2

這是一個非常廣泛的問題,可能無法以其當前形式來回答。

Akka HTTP在其HTTP處理層中解決了許多這些問題(例如空響應,路由,返回錯誤)。你可以使用那裏學到的一些經驗教訓並將它們應用到你的系統中嗎?或者,或許更好,你能否將你的系統從使用websocket通信轉換爲使用HTTP通信並直接使用該代碼?

相關問題