Java >> Java tutorial >  >> Tag >> Netty

Netty vs Apache MINA

De har begge nogenlunde samme funktionalitet. Hvilken skal jeg vælge for at udvikle min højtydende TCP-server? Hvad er fordele og ulemper?

Referencelinks:

Apache MINA (kilde)

Netty (kilde)

Svar

Mens MINA og Netty har lignende ambitioner, er de ret forskellige i praksis, og du bør overveje dit valg nøje. Vi var heldige, fordi vi havde masser af erfaring med MINA og havde tid til at lege med Netty. Vi kunne især godt lide den renere API og meget bedre dokumentation. Ydeevnen virkede også bedre på papiret. Endnu vigtigere vidste vi, at Trustin Lee ville være klar til at besvare alle spørgsmål, vi havde, og det gjorde han bestemt.

Vi fandt alt lettere i Netty. Periode. Mens vi forsøgte at genimplementere den samme funktionalitet, som vi allerede havde på MINA, gjorde vi det fra bunden. Ved at følge den fremragende dokumentation og eksempler endte vi med mere funktionalitet i meget, meget mindre kode.

Netty Pipeline fungerede bedre for os. Det er på en eller anden måde enklere end MINA'er, hvor alt er en handler, og det er op til dig at beslutte, om du vil håndtere upstream-begivenheder, downstream-begivenheder, begge dele eller forbruge mere lavt-niveau ting. At sluge bytes i "genafspilning" af dekodere var næsten en fornøjelse. Det var også meget rart at være i stand til at omkonfigurere pipelinen on-the-fly så nemt.

Men stjerneattraktionen for Netty, imho, er evnen til at skabe pipeline-handlere med en "dækning af én". Du har sikkert allerede læst om denne dækningsanmærkning i dokumentationen, men i det væsentlige giver den dig tilstand i en enkelt kodelinje. Uden at rode rundt, uden sessionskort, synkronisering og den slags, var vi simpelthen i stand til at erklære almindelige variabler (f.eks. "brugernavn") og bruge dem.

Men så ramte vi en vejspærring. Vi havde allerede en multiprotokolserver under MINA, hvor vores applikationsprotokol kørte over TCP/IP, HTTP og UDP. Da vi skiftede til Netty, tilføjede vi SSL og HTTPS til listen i løbet af få minutter! Så langt så godt, men da det kom til UDP, indså vi, at vi var skredet op. MINA var meget sød ved os, da vi kunne behandle UDP som en "forbundet" protokol. Under Netty er der ingen sådan abstraktion. UDP er forbindelsesløst, og Netty behandler det som sådan. Netty afslører mere af UDP's forbindelsesløse natur på et lavere niveau end MINA gør. Der er ting, du kan gøre med UDP under Netty, end du ikke kan under den abstraktion på højere niveau, som MINA leverer, men som vi stolede på.

Det er ikke så nemt at tilføje en "forbundet UDP"-indpakning eller noget. I betragtning af tidsbegrænsninger og på Trustins råd om, at den bedste måde at fortsætte på var at implementere vores egen transportudbyder i Netty, hvilket ikke ville være hurtigt, måtte vi til sidst opgive Netty.

Så se godt på forskellene mellem dem og kom hurtigt til et stadie, hvor du kan teste, at enhver vanskelig funktionalitet fungerer som forventet. Hvis du er tilfreds med, at Netty vil gøre jobbet, så vil jeg ikke tøve med at gå med det over MINA. Hvis du flytter fra MINA til Netty, gælder det samme, men det er værd at bemærke, at de to API'er virkelig er væsentligt forskellige, og du bør overveje en virtuel omskrivning til Netty - du vil ikke fortryde det!


Java tag