I/O (データベース操作など) を実行する必要がある場合、(Akka の) アクター モデルはどのように機能しますか?
ブロッキング操作が例外をスローすることは理解しています (そして、Akka が使用する Netty のイベント化された性質により、本質的にすべての同時実行が台無しになります)。したがって、Future
または同様のものを使用する必要がありますが、同時実行モデルがわかりません。
- 1 つのアクターが複数のメッセージを同時に処理できますか?
future
アクターが(つまり)でブロッキング呼び出しを行った場合future.get()
、現在のアクターの実行のみがブロックされます。それとも、ブロッキング呼び出しが完了するまで、すべてのアクターでの実行を防止しますか?- すべての実行をブロックする場合、将来の支援同時実行をどのように使用しますか?
- 各ステップが最後のステップに依存する多段階プロセス (つまり、データベースからの読み取り、ブロッキング Web サービスの呼び出し、データベースからの読み取り、データベースへの書き込み) を処理する最良の方法は何ですか?
基本的なコンテキストは次のとおりです。
- 何千ものセッションを維持する Websocket サーバーを使用しています。
- 各セッションにはいくつかの状態 (つまり、認証の詳細など) があります。
- Javascript クライアントは JSON-RPC メッセージをサーバーに送信し、サーバーはそれを適切なセッション アクターに渡します。サーバーはそれを実行して結果を返します。
- RPC 呼び出しの実行には、いくつかの I/O 呼び出しとブロッキング呼び出しが含まれます。
- 多数の同時リクエストが発生します (各ユーザーは WebSocket 接続を介して大量のリクエストを行い、多くのユーザーが存在します)。
これを達成するためのより良い方法はありますか?