OK、ここで何か危険を冒します。
免責事項:以下で読む内容にもかかわらず、ここから始めたいと思うかもしれません。
私はscalaに精通していませんが、Erlangと同様の原則を使用しており、そこでは多少快適に感じます。しかし、あなたの質問について私を混乱させていることは、これとはほとんど関係がありません。しかし、クライアントとサーバーの関係をさらに強化すると、確立しているように見えます。
定義上、サーバーは要求を受信しない限り、クライアントにメッセージを送信し続けることはありません。つまり、サーバーアクタークラスは、受信したメッセージをチェックしてそれに応じて動作するcaseステートメントを中心に構築する必要があります(必ずしもそうとは限りません)。したがって、このコンテキストでは、クライアントは存在し、サーバーはそれについて心配する必要はなく、代わりに通常どおり応答メッセージを送信する必要があります。これは、クライアントが要求でプレゼンスを認識したためです。
したがって、サーバーがクライアントにメッセージを送信しようとしている場合、これらはシャットダウンされていますが、要求を受信していないにもかかわらず、メッセージを送信しようとしているように見えます。これは、クライアントサーバー関係のコンテキストでは根本的に間違っています。サーバーは要求に応じてのみ反応する必要があります。それ以外の場合は、クライアントの役割を引き受けます。
いずれの場合も、クライアント/サーバー会話の終了を定義できます(そして定義する必要があります)。これは、リソースを解放し、確立された接続を終了するのに役立ちます。その効果のために:
クライアントアクターはサーバーに停止メッセージを送信し、scalaがアクタークラスに実装した終了関数を使用してサーバーの実行を終了する必要があります。
停止メッセージを受信すると、サーバーアクターはクライアントに応答しないようにする必要があります。代わりに、クライアントアクターと同様に、クリーンアップ(存在する場合)を実行して実行を終了する必要があります。
このようにして、関係するすべてのアクターの適切な終了とリソースの正しいリリースを保証します。
これが何らかの形で役に立ったことを願っています。残念ながら、私はscala自体に精通していません。そうでなければ、私はいくつかのコードを持ち込むことができます。しかし、うまくいけば、上記のリンクが役立つはずです。