La mia applicazione ha un'interfaccia Akka-Websocket. La presa web è composta da un attore-sottoscrittore e un editore attore. L'utente gestisce i comandi, inviandoli all'attore corrispondente. L'editore ascolta il flusso di eventi e pubblica le informazioni di aggiornamento sullo stream (e quindi sul client). Funziona beneCome inviare un messaggio in un flusso reattivo da un sottoscrittore a un editore in una connessione socket Web
La mia domanda: come è possibile che il Sottoscrittore invii un evento allo stream? Ad esempio per confermare l'esecuzione di un comando ricevuto.
public class WebSocketApp extends HttpApp {
private static final Gson gson = new Gson();
@Override
public Route createRoute() {
return get(
path("metrics").route(handleWebSocketMessages(metrics()))
);
}
private Flow<Message, Message, ?> metrics() {
Sink<Message, ActorRef> metricsSink = Sink.actorSubscriber(WebSocketCommandSubscriber.props());
Source<Message, ActorRef> metricsSource =
Source.actorPublisher(WebSocketDataPublisherActor.props())
.map((measurementData) -> TextMessage.create(gson.toJson(measurementData)));
return Flow.fromSinkAndSource(metricsSink, metricsSource);
}
}
Una bella soluzione potrebbe essere, che la sottoscrizione attore (il WebSocketCommandSubscriber
attore del codice di cui sopra) potrebbe inviare un messaggio al flusso come sender().tell(...)
...