Come posso identificare un attore a distanza?
-
21-08-2019 - |
Domanda
Ho un attore remoto (client), che sta registrando con un altro attore (server) a distanza e poi annullare la registrazione (con un gancio di arresto). Tuttavia, anche se il server riprende la de-registrazione, l'attuale sender
proprietà è un oggetto canale diverso ; così nei miei log del server che ho:
Registered new client [scala.actors.Channel@158e282]; supporting 1 clients
De-registered client [scala.actors.Channel@1caf0b6]; supporting 1 clients
Come è possibile determinare (sul lato server) che questo era lo stesso attore cliente che originariamente registrata con me? Ovviamente ho potuto permeare ogni cliente con la propria UUID
ma mi chiedo se c'è un modo più semplice?
Soluzione
Da una discussione sulla mailing list degli utenti Scala, sembra che questo non sia immediatamente possibile, senza l'utilizzo di un qualche tipo alternativo di identificatore di client (come UUID
). Se si invia il self
di riferimento da parte del cliente nel vostro oggetto di registrazione, si otterrà un errore di ObjectNotSerializable
.
Altri suggerimenti
esplicitamente aggiungere il mittente al messaggio. Utilizzare RemoteActor.select per ottenere uno scala.actors.remote.Proxy. Utilizzare il metodo toString per identificare il mittente.