Netty

http://netty.io/

http://mvnrepository.com/artifact/io.netty

''Netty is an asynchronous event-driven network java application framework for rapid development of maintainable high performance protocol servers & clients. ''

''Netty is a NIO client server framework which enables quick and easy development of network applications such as protocol servers and clients. It greatly simplifies and streamlines network programming such as TCP and UDP socket server.''

'Quick and easy' ''doesn't mean that a resulting application will suffer from a maintainability or a performance issue. Netty has been designed carefully with the experiences earned from the implementation of a lot of protocols such as FTP, SMTP, HTTP, and various binary and text-based legacy protocols. As a result, Netty has succeeded to find a way to achieve ease of development, performance, stability, and flexibility without a compromise.''

=Getting Started=

Récuperer les exemples du livre Netty in Action git clone https://github.com/normanmaurer/netty-in-action.git cd netty-in-action/ git checkout 2.0-SNAPSHOT mvn clean install

Depuis terminal 1, lancer l'EchoServer cd chapter2 cd Server/ mvn exec:java

Depuis terminal 2, lancer l'EchoClient cd chapter2 cd Client/ mvn exec:java

=Exemples du dépôt Netty=

Prérequis : Git, Java et Maven

Sur 3 machines client-1, proxy-1 et server-1
git clone https://github.com/netty/netty.git cd netty mvn clean install -DskipTests

./run-example.sh

FRONTEND=127.0.0.1 NETWORKSERVER=127.0.0.1 PROXY=proxy-1 SERVER=server-1
 * 1) Configurer les variables
 * 2) en test local
 * 1) en test sur un cluster multi-machine ou avec Docker

Expérimentation 1: echoclient x3 --> dumpproxy --> echoserver
Sur server-1 SSL_OPTIONS=-Dssl=false ./run-example.sh -DlogLevel=debug $SSL_OPTIONS -Dport=1202 echo-server

Sur proxy-1 ./run-example.sh -DlogLevel=debug -DlocalPort=1201 -DremotePort=1202 -DremoteHost=$SERVER proxy-server

Sur client-1 (3 terminaux)

Sur un terminal 1 de client-1 SSL_OPTIONS=-Dssl=false ./run-example.sh -DlogLevel=debug $SSL_OPTIONS -Dhost=$PROXY -Dport=1201 echo-client

Sur un terminal 2 de client-1 SSL_OPTIONS=-Dssl=false ./run-example.sh -DlogLevel=debug $SSL_OPTIONS -Dhost=$PROXY -Dport=1201 echo-client

Sur un terminal 3 de client-1 SSL_OPTIONS=-Dssl=false ./run-example.sh -DlogLevel=debug $SSL_OPTIONS -Dhost=$PROXY -Dport=1201 echo-client

Expérimentation 2: echoclient x3 --SSL--> dumpproxy --SSL--> echoserver
Commandes identiques avec la variable suivante: SSL_OPTIONS=-Dssl=true Remarque: le serveur génère un certificat X509 auto-signé.

Expérimentation 3: Discard example
Sur server-1 SSL_OPTIONS=-Dssl=false ./run-example.sh -DlogLevel=debug $SSL_OPTIONS -Dport=1201 discard-server
 * 1) Remarque: SSL pass-thru

Sur un terminal 1 de client-1 SSL_OPTIONS=-Dssl=false ./run-example.sh -DlogLevel=debug $SSL_OPTIONS -Dhost=$SERVER -Dport=1201 -Dsize=1024 discard-client

Expérimentation 4 : Microbenchmarks extensibles
cd microbenchmark mvn -DskipTests=false -DwarmupIterations=2 -DmeasureIterations=3 -Dforks=1 test

=Projets connexes=

Nifty
Nifty is an implementation of Thrift clients and servers on Netty.
 * https://github.com/facebook/nifty
 * https://github.com/facebook/swift

Finagle
Projet open-source de Twitter utilisant Netty et ajoutant des fonctions de load-balancing, de failover, de trace (avec Zipkin) ...
 * https://github.com/twitter/finagle
 * https://github.com/jghoman/finagle-java-example

Autres

 * Netty et RDBMS https://github.com/mauricio/postgresql-async
 * https://github.com/eirslett/thrift-zookeeper

=Livre=
 * Norman Maurer and Marvin Allen Wolfthal, Netty in Action, Mannings, https://www.manning.com/books/netty-in-action