OK, je vais risquer quelque chose ici. Disclaimer: malgré ce que vous allez lire ci-dessous, vous pouvez vouloir start here. Je ne suis pas familier avec scala, mais il utilise des principes similaires à Erlang et je me sens un peu à l'aise là-bas. La chose qui me déroute dans votre question n'a cependant rien à voir avec cela. Mais plus avec la relation client-serveur que vous semblez établir.
Par définition, un serveur ne continue pas d'envoyer des messages au client à moins qu'il ne reçoive une requête. C'est-à-dire que la classe d'acteur serveur doit être construite (pas nécessairement toujours) autour d'instructions de cas qui vérifient le message reçu et agissent en conséquence. Donc, dans ce contexte, le client est existant et le serveur ne devrait pas s'en soucier et envoyer à la place son message de réponse normalement, parce que le client a juste fait sa présence avec une requête.
Donc, si votre serveur essaie toujours d'envoyer des messages aux clients, malgré qu'ils aient été fermés, il me semble qu'il essaie d'envoyer des messages malgré le fait qu'il n'ait reçu aucune requête. Ceci est fondamentalement faux dans le contexte d'une relation client-serveur. Le serveur ne devrait réagir que sur demande. Sinon, il prend le rôle du client.
Dans tous les cas, vous pouvez (et) définir une fin à toute conversation client-serveur. Cela aidera à libérer des ressources et à mettre fin aux connexions établies. Pour cet effet:
Votre acteur client doit envoyer un arrêt message au serveur et mettre fin à son exécution avec quelle que soit la fonction de sortie scala a mis en œuvre pour la classe acteur.
À la réception d'un message d'arrêt, l'acteur serveur doit ne pas répondre au client. Au lieu de cela, il devrait faire son nettoyage (le cas échéant) et terminer l'exécution de la même manière que l'acteur client.
De cette façon, vous assurez une terminaison correcte de tous les acteurs impliqués et une libération correcte des ressources.
J'espère que cela a aidé d'une manière ou d'une autre. Malheureusement, je ne suis pas familier avec Scala lui-même. Sinon, je pourrais apporter du code. Mais le lien ci-dessus devrait aider, espérons-le.
Avez-vous regardé le membre trapExit du trait Acteur? Il est documenté ici: http: //www.scala-lang.org/docu/files/acteurs-api/actors_api_guide_1.html – djondal