Tip:
Highlight text to annotate it
X
Hæ, í þessu myndbandi mun ég sýna ykkur hvernig á að forrita einfalt samskipta forrit
með Netty á innan við 15 mínutum.
First þarf að búa til nýtt Java verkefni, og til þess mun ég nota Maven.
Í þessu myndbandi mun ég nota netty-all safnið.
Til þess að komast hjá villum í keyrslu tö*** við einning javassit safnið.
Einnig þar sem við búum ekki á steinöld þá vill ég að Maven noti nýjustu útgáfu af
Java 1.7 fyrir þetta dæmi.
Jæja, núna erum við tilbúin að byrja forrita!
Byrjum að búa til nýjann klasa sem við köllum ChatClient og skilgreinum við hann nýjann pakka.
Búum til smið með tveimur færibreytum: endastöð og gátt til þess að tengjast.
Geymum þessar tvær breytur í sem staðbundnar loka breytur.
Við skrifum einnig opið keyrslu fall fyrir raunverulega hegðun notenda.
Fyrst þurfum við tilvik af nýju IO viðburðar lúppunni af Netty.
Næst notum við Bootstrap klasann til þess að setja upp rás með EventLoopGroup.
Og látum hana nota nýju IO Sockets.
Að lokum viljum við láta ChatClientInitializer nota klasa rásina sem við
útfærum seinna.
Nú getum við spurt Bootstrap tilvikið til þess að búa til tengingu á þjón með
réttri vistfangi og porti.
Eftir tengingu þá getum við spurt eftir rásar tilviki sem við getum notað í
samskiptum við þjóninn.
Við þurfum einnig BufferedReader til þess að taka við innslátti notanda.
Við bætum við while lúppu sem sér um að sækja innslátt notanda frá forritinu og skrifa það út 24 00:03:33,061 --> 00:03:38,058 á þjóninn. Að lokum lokum við lúppunni til þess að klára loka EventLoopGroup.
Við bætum einnig aðal fallinu sem við þurfum til þess að byrja ChatClient portið á 8000 á
localhost.
Núna er komið að því að útfæra ChatClientInitializer.
Í staðinn fyrir að útfæra hefðbundinn ChannelHandler viðmót þá bætum við frekar við ChannelInitializer
klasann.
Athugaðu að við þurfum þennan klasa til að skilgreina SocketChannels, svo við breytum honum
aðeins.
Hér munum við skilgreina hvað Netty kallar pípu. Í grunnin þá útskýrir það hvernig við viljum
skilgreina samskiptin okkar.
Fyrst segjum við Netty að við erum að búast við römmum að mesta lagi 8192 í stærð, hver af þeim
endar með nýrri línu.
Þar sem við erum bara að skiptast á strengjum á milli þjóns og notenda þá getum við notað
StringDecoder til þess að þýða bætin í strengi.
Við getum einnig notað StringEncoder til þess að kóða strengina í bæti, sem við síðan sendum
yfir á þjóninn.
Að lokum skilgreinum við klasa sem getur höndlað alla strengina sem koma inn
frá þjóninum.
Í þessum klasa þurfum við að skilgreina ChannelInboundMessgeHandlerAdapter klasann.
Athugað að við viljum að þessi klasi höndli öll tilvik af strengjum, þurfum því að
lagfæra hann aðeins.
Það sem við viljum gera er að prenta hvaða streng sem við fáum frá þjóninum hjá notendanum.
Það sem eftir er fyrir ChatClient eru nokkur köll sem gætu mögulegað kastað villum.
Til þess að einfalda dæmið þá sleppum við þeirri útfærslu núna.
ChatClient er núna tilbúinn. Núna skulum við byrja á ChatServer með því að búa hann til
klasann.
We're going to create a similar setup as to the ChatClient class. Let's start by creating
a constructor with a single parameter: the port to listen on for incoming connections.
Geymum þennan klasa í staðbundinni loka breytu.
Næst skulum við býa til keyrslu fall, sem mun hlusta eftir tengingum sem koma inn og skila
þeim til frekari vinnslu.
Við þurfum einnig tvö ný IO EventLoopGroups. Yfir grúppan mun samþykkja tengingar inn
um leið og þær koma og skila þeim fyrir á kerslu vinnu grúppuna.
Eins og í ChatClient klasanum þá notum við BootStrap klasann til þess að setja upp rásina,
Við getum notað ServerBootstrap klasann hér til þess að skilgreina hvernig þjónnin
vinnur á tengingum inn.
Við skilgreinum fyrst hvernig á að nota yfir grúppuna og vinnu grúppuna.
Og eins með ChatClient þá viljum við nota nýju IO ServerSockets fyrir samskipti.
Næst skulum við skilgreina klasa sem mun höndla öll skilaboð sem koma. Við útfærum
þetta eftir skamma stund.
Að lokum getum við sagt ServerBootstrap tilvikinu að binda það á sérstakt port, og byrja hlusta á
eftir nýjum tenginum.
Áður en við hættum í keyrslu fallinu er góð hefð að hreinsa upp notuðu EventLoopGroups.
Við skulum einnig bæta við aðal keyrslufalli sem byrjar ChatServer með porti 8000 til þess að hlusta
eftir tengingum sem koma inn.
Núna er komið að því að útfæra ChatServerInitializer klasann.
Aftur þá skulum við ekki útfæra hefðbundið ChannelHandler viðmót, heldur bæta við
ChannelInitializer klassann.
Þessi uppsetningar klasi ætti að setja upp SocketChannels þannig að við þurfum að gera smávæginlegar breytingar.
Eins og í ChatClientInitializer klasanum, þá þurfum við að skilgreina ChannelPipeline.
Þar sem framer, decoder og encoder eru eins og útfært er í ChatClientInitializer
klasanum, þá getum við afritað þá yfir.
Að lokum þurfum við að skilgreina handler klasann sem
sem getur höndlað skilaboð frá notendum.
Þessi klasi skal bæta við ChannelInboundMessageHandlerAdapter frekar
en að bæta við útfæra ChannelHandler viðmótið.
Við þurfum aðeins að breyta því þar sem við munum vinna á öllum strengjum sem koma inn
hér.
Þess þess að skilgreina hver sendi okkur skilaboð, þá þurfum við að biðja um tilvikið af rásinni.
Næst munum við senda skilaboð á alla aðra. Við getum gert það með því að fara yfir allar
rásir sem við þekkjum og skrifa skilaboð til allra rása nema fyrir þá sem
fékk skilaboðin upprunalega.
Við getum fylgst með þessum rásum í ChannelGroup tilvikinu.
Mundu að við eigum bara að senda skilaboð á allar rásir nema þær sem sendu
skilaboð á þjóninn.
Við erum alveg að verða búinn. Eigum enþá eftir að halda utan um virkar rásir.
Þetta gerum við með að yfirskrifa handlerAdded fallið.
Þetta fall verður kallað þegar nýr ChatClient tengist á ChatServer.
Hér getum við látið aðra ChatClients bita að nýr notandi hefur tengst.
Að lokum getum við bætt við í ChannelGroup tilvikið.
Við þurfum einnig að halda utan um þegar ChatClients aftengjast frá ChatServer.
Þetta getum við gert með að yfirskrifa handlerRemoved fallið.
Hér getum við einnig látið alla ChatClients vita að einn notandi
hefur aftengst samtalinu.
Að lokum tö*** við það úr ChannelGroup tilvikinu.
Að lokum er eitt kall í fall sem gæti kastað villu, sleppum þeirri útfærslu
í þessu dæmi.
Jæja þá er kóðinn tilbúinn. Núna er komið að því að prófa nýja spjall forritið okkar.
Byrjum með því að keyra ChatServer tilvik.
Næst störtum við ChatClient.
Einnig bætum við öðru console þannig að við getum sýnt tvo ChatClients í einu
hlið við hlið.
Eins og þú sérð þá er aðeins einn ChatClient keyrandi, byrjum notanda númer tvö.
Vinstrameginn þá sérðu fyrsta notendann og hægrameginn er notandi tvö, prófum
þetta aðeins.
Flott! Allt virðist virka eðlilega.
Þökk fyrir að fylgjast með þessu myndbandi, ég vona að þú hafir notið þess.