Server TCP con Vert.x

La caratteristica più interessante del framework Vert.x è che fornisce funzionalità che consentono di realizzare server TCP, HTTP, WebSocket, etc., in modo semplice e veloce. Dopo aver introdotto il framework negli articoli Primi Passi con Vert.x (parte 1)Primi Passi con Vert.x (parte 2), continuiamo la serie mostrando come sia possibile implementare un server e client TCP.

Creiamo quindi un progetto Maven ed inseriamo nel pom.xml la dipendenza al framework:

Implementazione del Server TCP

Creiamo nel progetto la classe MainTcpServer ed il relativo metodo main(). Al suo interno eseguiremo tutte le azioni necessarie per l’implementazione e l’avvio del server TCP, che possono essere così riepilogate:

  1. Creazione di un oggetto di tipo NetServer (che rappresenta un server TCP) eventualmente configurandolo con differenti opzioni.
  2. Definizione di un handler che viene invocato dal server ogni volta che una nuova connessione viene aperta da un client.
  3. Avvio del server TCP.

Procediamo con l’esecuzione del primo step e generiamo un oggetto di tipo NetServer configurandolo in modo da metterlo in ascolto sulla porta 9090 dell’host localhost:

Successivamente definiamo un handler che dovrà gestire la comunicazione nel momento in cui una nuova connessione viene aperta. A tale scopo la classe NetServer fornisce il metodo  connectHandler():

L’handler riceve in input on oggetto di tipo NetSocket che consente di leggere e scrivere dati nella socket e di eseguire altre operazioni come la chiusura della socket stessa. Nello stesso modo per leggere i dati dalla socket è possibile registrare un handler attraverso il metodo handler() dell’oggetto NetSocket, che riceverà in input un oggetto di tipo Buffer contenente la sequenza di byte di input. Nel nostro esempio si è deciso di stampare su console il contenuto del buffer attraverso il metodo toString().

Infine dobbiamo avviare il server TCP invocando il metodo listen(). Ancora una volta è possibile definire un handler per determinare l’esito dell’operazione, che altrimenti non ci sarebbe noto.

Test di Connessione

Facciamo un test eseguendo il progetto e successivamente inserendo in un browser l’url http://localhost:9090. Sulla console troveremo stampata la richiesta standard inviata dal browser:

Implementazione del Client TCP

Creiamo la classe MainTcpClient ed il relativo metodo main(). Al suo interno utilizzeremo il metodo createNetClient() dell’oggetto Vertx per istanziare un oggetto NetClient che rappresenta un client TCP.

Analogamente a quanto fatto per il server è possibile configurare il client con differenti opzioni. Nel nostro caso abbiamo definito:

  • il timeout di connessione a 1 secondo (1000ms);
  • il numero di tentativi di connessione (10);
  • l’intervallo tra un tentativo di connessione ed il successivo (500ms).

Per l’apertura della connessione verso il server è possibile utilizzare il metodo connect() specificando l’host, la porta e naturalmente l’handler che gestirà il risultato del tentativo di connessione.

In caso di connessione avvenuta con successo il risulta dell’operazione conterrà un oggetto NetSocket attraverso il quale sarà possibile comunicare col server. Una volta avviate le due classi MainTcpServerMainTcpClient sulla console del server verrà stampato:

Codice Sorgente

Il codice sorgente con tutti gli esempi mostrati è scaricabile qui vertx-tcp.

How useful was this post?

Click on a star to rate it!

Average rating 0 / 5. Vote count: 0

No votes so far! Be the first to rate this post.

As you found this post useful...

Follow us on social media!