Хорошо, я рискну чем-то здесь.
отказ от ответственности: несмотря на то, что вы прочтете ниже, вы можете начать здесь .
Я не знаком со скалой, но она использует принципы, аналогичные принципам Эрланга, и я чувствую себя там несколько комфортно. Однако то, что меня смущает в вашем вопросе, не имеет к этому никакого отношения. Но больше похоже на отношения клиента с сервером, которые вы, похоже, устанавливаете.
По определению, сервер не будет продолжать отправлять сообщения клиенту, пока не получит запрос. Таким образом, класс субъекта сервера должен быть построен (не обязательно всегда) вокруг операторов case, которые проверяют полученное сообщение и действуют соответственно. Таким образом, в этом контексте клиент существует, и сервер не должен беспокоиться об этом и вместо этого отправляет свое ответное сообщение в обычном режиме, поскольку клиент только что сообщил о своем присутствии с помощью запроса.
Так что, если ваш сервер все еще пытается отправлять сообщения клиентам, несмотря на то, что они были закрыты, мне кажется, что он пытается отправлять сообщения, несмотря на то, что не получил запроса. Это в корне неверно в контексте отношений клиент-сервер. Сервер должен реагировать только по запросу. В противном случае он берет на себя роль клиента.
В любом случае вы можете ( и ) определить конец любого разговора клиент-сервер. Это поможет освободить ресурсы и разорвать установленные соединения. Для этого эффекта:
Ваш клиентский субъект должен отправить серверу сообщение stop и прекратить его выполнение любой функцией выхода, реализованной в scala для класса актера.
При получении сообщения об остановке субъект сервера должен не отвечать клиенту. Вместо этого он должен выполнить очистку (если есть) и прекратить выполнение аналогично действующему субъекту клиента.
Таким образом, вы гарантируете правильное завершение всех вовлеченных субъектов и правильное освобождение ресурсов.
Надеюсь, это как-то помогло. К сожалению, я не знаком с самой Scala. В противном случае я мог бы ввести некоторый код. Надеемся, что приведенная выше ссылка должна помочь.