OK, voy a arriesgar algo aquí.
descargo de responsabilidad: a pesar de lo que leerá a continuación, es posible que desee start here.
No estoy familiarizado con Scala, pero utiliza principios similares a los de Erlang y me siento algo cómodo allí. Sin embargo, lo que me confunde con tu pregunta tiene poco que ver con esto. Pero más con la relación cliente-servidor que pareces estar estableciendo.
Por definición, un servidor no seguirá enviando mensajes al cliente a menos que reciba una solicitud. Es decir, la clase de actor de servidor debe construirse (no necesariamente siempre) alrededor de las declaraciones de casos que verifican el mensaje recibido y actúan en consecuencia. Por lo tanto, en este contexto, el cliente ya existe y el servidor no debería preocuparse por ello y, en su lugar, debe enviar su mensaje de respuesta con normalidad, ya que el cliente simplemente hizo consciente su presencia con una solicitud.
Así que si su servidor todavía está tratando de enviar mensajes a los clientes, a pesar de que se han cerrado, me parece que está tratando de enviar mensajes a pesar de no haber recibido ninguna solicitud. Esto es fundamentalmente incorrecto en el contexto de una relación cliente-servidor. El servidor solo debe reaccionar bajo petición. De lo contrario, asume el papel del cliente.
En cualquier caso, puede (y debe) definir el final de cualquier conversación cliente-servidor. Esto ayudará a liberar recursos y finalizar las conexiones establecidas. Para tal efecto:
Su agente cliente debe enviar una parada mensaje al servidor y terminar su ejecución con lo Scala función de salida ha puesto en marcha para la clase de actor.
Al recibir un mensaje de detención, el actor del servidor debe no responder al cliente. En su lugar, debe hacer su limpieza (si corresponde) y finalizar la ejecución de manera similar al actor del cliente.
De esta manera garantiza la terminación adecuada de todos los actores involucrados y una correcta liberación de recursos.
Espero que esto ayude de alguna manera. Lamentablemente, no estoy familiarizado con Scala. De lo contrario, podría traer algún código. Pero el enlace de arriba debería ayudar, con suerte.
¿Has echado un vistazo al miembro trapExit del atributo Actor? Está documentado aquí: http: //www.scala-lang.org/docu/files/actors-api/actors_api_guide_1.html – djondal