Gestione delle risposte da un outputstream

1

Ho un InputStream e un OutputStream su un server. Posso inviare una serie di richieste JSON sul filo e ottenere un flusso di risposte da questo server. Da questo, mi piacerebbe creare un wrapper che fornisca getter come getFoo() che creano una richiesta, la inviano e ottengono una risposta.

Non sono sicuro su come gestirlo considerando che potrei avere molti clienti che usano questo singolo InputStream e OutputStream in un dato momento, e spero che ci sia un buon modo per progettarlo.

Ecco un'opzione che ho considerato:

  • Il lettore InputStream legge costantemente le risposte e le inserisce in un Map<RequestType, Response> che memorizza l'ultima risposta per ogni RequestType (dove requestType è getFoo , getBar , ecc.)
  • Quando chiamo getFoo() sul mio wrapper, scrive la richiesta su OutputStream, quindi rimane in attesa di responseMap.get(RequestType.FOO) , lo legge e cancella quella voce nella mappa.

Un'altra opzione:

  • Quando chiamo getFoo() sul mio wrapper, si registra come un callback con il lettore InputStream
  • Quando il lettore InputStream analizza una risposta (ad esempio la risposta foo dall'alto) notifica a tutti gli ascoltatori che attendono la risposta foo , quindi cancella gli ascoltatori.

Entrambi sembrano fragili quando comincio a pensare alla concorrenza. C'è un modo migliore per avvicinarsi a questo?

    
posta Crummy 29.07.2016 - 08:35
fonte

1 risposta

2

I have an InputStream and an OutputStream to a server. I can send a bunch of JSON requests over the wire and get a stream of responses back from this server

Non puoi semplicemente aprire più connessioni al server, e quindi ottenere più flussi di input / output? In questo scenario puoi affermare che il componente che apre quella connessione otterrà solo le risposte per esso, e solo.

    
risposta data 29.07.2016 - 11:30
fonte