package Ġio . acon ite . bench . vertx Ċ Ċ import Ġio . acon ite . annotations . GET Ċ import Ġio . acon ite . client . A con ite Client Ċ import Ġio . acon ite . client . client Pipeline Ċ import Ġio . acon ite . client . clients . Vert x HttpClient Ċ import Ġio . acon ite . server . A con ite Server Ċ import Ġio . acon ite . server . handlers . Vert x Handler Ċ import Ġio . acon ite . server . server Pipeline Ċ import Ġio . vertx . core . Abstract Vert icle Ċ import Ġio . vertx . core . Vert x Ċ import Ġio . vertx . ext . web . Router Ċ import Ġio . vertx . ext . web . handler . Body Handler Ċ import Ġkotlinx . coroutines . experimental . Un conf ined Ċ import Ġkotlinx . coroutines . experimental . launch Ċ import Ġkotlinx . coroutines . experimental . with Timeout OrNull Ċ import Ġjava . util .* Ċ import Ġjava . util . concurrent . Comp letableFuture Ċ import Ġjava . util . concurrent . atomic . Atomic Integer Ċ import Ġkotlin . concurrent . thread Ċ Ċ interface ĠApi Ġ{ ĊĠĠĠ Ġ@ GET ("/ test ") Ġsuspend Ġfun Ġtest () Ċ } Ċ Ċ class ĠImp l Ġ: ĠApi Ġ{ ĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġtest () Ġ{ ĊĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠServer Vert icle ( private Ġval Ġhost : ĠString , Ġprivate Ġval Ġport : ĠInt ) Ġ: ĠAbstract Vert icle () Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġstart () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġserver Ġ= Ġserver Pipeline Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinstall ( A con ite Server ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġregister ( Impl (), ĠApi :: class ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġhandler Ġ= ĠVert x Handler ( vertx , Ġserver ) ĊĊĠĠĠĠĠĠĠ Ġval Ġrouter Ġ= ĠRouter . router ( vertx ) ĊĠĠĠĠĠĠĠ Ġrouter . route (). handler ( Body Handler . create ()) ĊĠĠĠĠĠĠĠ Ġrouter . route (). handler ( handler ) ĊĊĠĠĠĠĠĠĠ Ġvert x . create HttpServer () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. request Handler ( router :: accept ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. listen ( port , Ġhost ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠClient Vert icle ( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġhost : ĠString , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġport : ĠInt , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġconnections : ĠInt , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġcounter : ĠAtomicInteger , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġtimeout : ĠLong Ċ ) Ġ: ĠAbstract Vert icle () Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġstart () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpipeline Ġ= Ġclient Pipeline Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinstall ( Vert x HttpClient ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconnections Count Ġ= Ġconnections ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvert x Ġ= Ġthis @ Client Vert icle . vertx ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġclient Ġ= ĠA con ite Client ( pipeline ) ĊĠĠĠĠĠĠĠ Ġval Ġapi Ġ= Ġclient . create < Api >() [" http :// $ host :$ port "] ĊĊĠĠĠĠĠĠĠ Ġ( 1 .. connections ). forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlaunch ( Un conf ined ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( true ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith Timeout OrNull ( timeout ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapi . test () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcounter . increment AndGet () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġmain ( args : ĠArray < String >) Ġ{ ĊĠĠĠ Ġval Ġrand Ġ= ĠRandom () ĊĠĠĠ Ġval Ġhost Ġ= Ġ" localhost " ĊĠĠĠ Ġval Ġport Ġ= Ġ 3 0 0 0 0 Ġ+ Ġrand . nextInt ( 3 0 0 0 0 ) ĊĠĠĠ Ġval Ġconnections Ġ= Ġ 1 6 ĊĠĠĠ Ġval Ġtimeout Ġ= Ġ 1 0 0 0 L ĊĊĠĠĠ Ġval Ġvert x Ġ= ĠVert x . vertx () ĊĊĠĠĠ Ġval Ġserver Started Ġ= ĠCompletableFuture < Unit >() ĊĠĠĠ Ġvert x . deploy Vert icle ( Server Vert icle ( host , Ġport )) Ġ{ ĊĠĠĠĠĠĠĠ Ġserver Started . complete ( Unit ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġserver Started . get () ĊĊĠĠĠ Ġprintln (" Server Ġlistening Ġon Ġaddress Ġhttp :// $ host :$ port ") ĊĊĠĠĠ Ġval Ġcounter Ġ= ĠAtomicInteger () ĊĠĠĠ Ġval Ġclient St ated Ġ= ĠCompletableFuture < Unit >() ĊĠĠĠ Ġvert x . deploy Vert icle ( Client Vert icle ( host , Ġport , Ġconnections , Ġcounter , Ġtimeout )) Ġ{ ĊĠĠĠĠĠĠĠ Ġclient St ated . complete ( Unit ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġclient St ated . get () ĊĊĠĠĠ Ġprintln (" Client Ġstarted Ġwith Ġ$ connections Ġconnections ") ĊĊĠĠĠ Ġthread Ġ{ ĊĠĠĠĠĠĠĠ Ġwhile Ġ( true ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠThread . sleep ( 1 0 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġr ps Ġ= Ġcounter . get AndSet ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ("$ r ps Ġrequests / sec ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }