2016-07-05 4 views
8

私はakka-httpとakka-streamsを使って実際のwebsocketアプリケーションを実装する最良の方法を理解しようとしています。私が主に探しているのは、シンプルさです。私は今得意ではありません。Akka Streams Websocket Wiring

複数のリクエストを区別する必要があり、処理のためにリクエストをアクターに送信する必要があると想定し、mongoクエリを発行してレスポンスを返したり、REST APIでPUTを実行することがあります。それはで期待されていないため、条件付きで、例えば、応答をスキップ

  • そこに簡単なチャットアプリケーションの例とは異なり、標準のソリューションを持っていないように思われたが生じ、少なくとも3つの問題がありますこの要求が応答を受け取るクライアント。メッセージからメッセージへの典型的なフローを使用すると、リクエストがターゲットに到達したら、それをwebsocketにさらに伝播させないようにする必要があります。特殊なフィルタ(痛みを伴います)やさまざまな方法(例:Conditionally skip flow using akka streams)を使用して行うことができますが、これによって多くの定型文と複雑さが追加されます。理想的には、他のすべてをスキップする「スキップ」メッセージを挿入できるようにしたいと考えています。

  • 着信メッセージを適切な場所(たとえば、俳優、mongo)にルーティングします。繰り返しますが、私は、このような要求を処理しないブランチでブロードキャストやフィルタアウトなど、多くの定型文を使用するソリューションを見つけることができます。理想的には、メッセージがXの場合はメッセージをYに送信し、メッセージがある場合は送信します。

  • エラーをクライアントに伝播することが理想的です。上記のルーティング問題と非常によく似ています。たとえば、JSON解析が失敗した場合、別のパス(ブロードキャスト+マージ)を追加してエラーメッセージを送信する必要がありますが、次のステージでエラーが発生した場合でも同じパスを簡単に再利用することはできませんそのエラーをユーザーに伝播します。理想的には、エラー処理のための単一の別個のパスを持つ必要があります。このパスは、フローの任意のポイントで使用でき、フローの残りの部分を完全にバイパスしてクライアントに戻ります。現時点で

、私は> 20回の異なるステージを経由するパスを持つ15行にまたがるこのめちゃくちゃ複雑なグラフを持っていると私はチェックして、このソリューションの複雑さを保つことについては本当に心配です。 DSLはこのサイズではほとんど読めません。私はもちろん、少し上手くモジュール化することができますが、これははるかに簡単な何かのための厄介な問題のように感じます。

何か不足していますか?私はこのような仕事のためにアクアストリームを検討するのは難しいですか?すべての複雑さを抑えることができるアイデアやコード例?

ありがとうございます!

答えて

2

これは非常に幅広い質問であり、現在の形式では対応できない場合があります。

Akka HTTPは、HTTP処理レイヤ(空の応答、ルーティング、エラーの返送など)でこれらの懸案事項の多くを解決します。そこで学んだレッスンのいくつかを使って、それらをシステムに適用できますか?あるいは、あなたのシステムをwebsocket通信からHTTP通信を使用するように変換し、そのコードを直接使用できますか?

関連する問題