Programavimas

Paprastas „peer-to-peer“ taikymas

Buvo sakoma, kad „Kazaa“, „peer-to-peer“ (P2P) failų bendrinimo programa, sukelia didesnį tinklo srautą nei bet kuri kita programa. „Kazaa“ svetainėje teigiama, kad ją buvo atsisiųsta daugiau nei 385 000 000! Palyginimui peržiūrėjau populiariausius „Download.com“ atsisiuntimus, kuriuose „Ad Aware“ yra išvardyti kaip populiariausi, o atsisiuntimai atlikti tik 117 000 000. Iš 25 populiariausių Download.com atsisiuntimų atpažinau 11 „P2P“ programų. Vien atsižvelgiant į šiuos pastebėjimus, akivaizdu, kad P2P programos populiarėja. Tačiau dalijimasis failais nėra vienintelis P2P programos tipas. Dauguma įprastos tiesioginių pranešimų programos operacijų yra P2P. Kiti pavyzdžiai yra forumai ir paskirstytos duomenų bazės. Ir sąrašas tik toliau didėja.

Norėdami sukurti panašias P2P programas, turite turėti priemonių, leidžiančių atrasti ir bendrauti su kitais bendraamžiais. Dauguma sunkumų, susijusių su P2P programų kūrimu, yra susiję su bendraamžių tinklo palaikymu, pranešimų formatavimu ir perdavimu, kitų bendraamžių atradimu ir kitomis panašiomis problemomis. Projektas „Jxta“ ir jo „Java“ susiejimas tvarko šiuos jūsų programos aspektus. Naudodami „Jxta“ galite sutelkti dėmesį į savo programą, o ne į bendruosius P2P klausimus.

„Jxta“ yra sutrumpinta žodžio versija sugretinti, o tai reiškia greta. „Jxta“ programuotojo vadove „Jxta“ apibrėžiama kaip „atvira skaičiavimo platforma, skirta P2P skaičiavimams“. Tai nėra būdinga jokiai platformai ar programavimo kalbai. Jis buvo sukurtas „Sun Microsystems“ ir buvo išleistas atvirojo kodo bendruomenei palaikyti ir augti. Kartu su jo išleidimu buvo išleistas pradinis „Java“ diegimas. Šiame straipsnyje aš sutelkiu dėmesį į tai, kaip aptariu, kaip naudoti „Jxta“ „Java“ aplinkoje. Taip pat aptariu šešias dažniausiai naudojamas „Java“ įdiegtas „Jxta“ programas ir pristatau įrankius, kurių reikia norint pradėti kurti savo „P2P“ programas. Perskaitęs šį straipsnį tikiuosi, kad suprasite, kaip lengva ir įdomu gali būti kurti P2P programas. „P2P“ programos ir toliau augs ne tik populiarumu, bet ir įvairove, o rytojaus kūrėjai turi pradėti mokytis šių technologijų jau šiandien, kad išliktų pažangiausiuose.

Java ir Jxta

Pirmasis „Jxta“ naudojimo žingsnis yra jo atsisiuntimas iš „Jxta“ atsisiuntimų puslapio. Kaip dauguma skaitytojų sutiks, kartais atvirojo kodo projektus gali būti sunku įsigyti ir sukonfigūruoti naudoti. „Jxta“ yra puikaus atvirojo kodo projekto pavyzdys labai lengva atsisiųsti ir naudoti iš karto. Jei jums sunku, ir jums reikia daugiau informacijos apie „Jxta“ atsisiuntimą ir naudojimą, skaitykite „Jxta“ programuotojo vadovą.

Kai pirmą kartą paleidžiate „Jxta“ įgalintą programą iš naujo katalogo, jums bus pateiktas GUI konfigūratorius.

Kas iš tikrųjų yra bendraamžis? Pasak Danielio Brookshire'o (gerai žinomas „Jxta“ vykdytojas ir vadinamasis „čempionas“), tai yra „virtualaus ryšio taškas“, kuriame skirtingi bendraamžiai gali veikti tuo pačiu įrenginiu. Prietaisas neapsiriboja asmeniniu kompiuteriu; tai gali būti mobilusis telefonas, serveris ar net paprastas daiktas kaip jutiklis. Yra specialių bendraamžių, kuriuos turime žinoti pasimatymas ir estafetė. Susitikimo bendraamžis leidžia bendraamžiams bendrauti už vietinio potinklio ribų, o persiuntimo bendraamžis naudojamas informacijai perduoti per užkardas.

Pradėkime nuo šešių labiausiai paplitusių „Jxta“ taikymo operacijų, apibrėžtų „Jxta naudojimo išlaidos“ (IEEE Computer Society, 2003 m. Rugsėjo mėn.). Jie išvardyti žemiau tokia tvarka, kokia jie paprastai būna.

  1. Pradedant „Jxta“: „Jxta“ paleidimas yra gana paprastas ir tiesiog reikalingas kelioms kodo eilutėms.
  2. Prisijungimas prie bendraamžių grupės: Bendraamžių grupė yra bendraamžių grupė, turinti bendrus interesus, kurie buvo sugrupuoti. Šiame straipsnyje aptariu prisijungimą prie esamų bendraamžių grupių ir naujų grupių kūrimą.
  3. Skelbimų skelbimas: „Jxta“ yra paprasčiausia reklama. „Jxta“ naudoja reklamą, kad atrastų bendraamžius, bendraamžių grupes ir kitus išteklius nepriklausomai nuo platformos. Vėliau šiame straipsnyje aptariu naujų skelbimų skaitymą, kūrimą ir siuntimą.
  4. Įvado vamzdžio atidarymas: Vamzdis yra vienas iš mechanizmų, kurį bendraamžiai naudoja bendraujant tarpusavyje. Vamzdžiai yra „virtualus bendravimas kanalusVirtualūs to vamzdžio vartotojai nežino kito bendraamžio adreso. Aptariu vamzdžių naudojimą pranešimams siųsti šio straipsnio skyriuje apie vamzdžius.
  5. Atraskite kitus bendraamžių išteklius: Kad galėtumėte bendrauti su kitais bendraamžiais, pirmiausia turite rasti keletą, kuriuos taip pat aptarsiu.
  6. Išėjimo vamzdžio atidarymas: Išvesties vamzdžiai naudojami pranešimams siųsti kitiems bendraamžiams. Yra dvi išvesties vamzdžių klasės: nuo tasko iki tasko, arba „vienas prie vieno“ ir sklidimas, arba vienas prie daugelio.

Dabar, kai žinote, kur šis straipsnis jus nuveš, pradėkime savo kelionę.

Bendraamžių grupės

Bendraamžių grupės yra tiesiog bendraamžių, turinčių tam tikrų bendrų interesų, rinkinys. Bendraamžių grupės, kaip ir bendraamžiai, gali teikti paslaugas, tačiau bendraamžių grupės paslaugos nebūtinai priklauso nuo konkretaus bendraamžio, kuris tenkina jai pateiktas užklausas. Tol, kol paslaugą teikia vienas grupės bendraamžis, paslauga yra prieinama. Kiekvienas bendraamžis yra pasaulio bendraamžių grupė ir taip pat paprastai grynoji bendraamžių grupė, ir gali pasirinkti prisijungti ir palikti kitas grupes savo nuožiūra. Kokia motyvacija kurti bendraamžių grupes? Štai kelios priežastys:

  • Palaikykite saugų regioną: Jei turite saugią bendraamžių grupę, grupės bendraamžiai neprivalo atskleisti savo kritinės informacijos.
  • Teikti bendras paslaugas: Paprastai daugelis bendraamžių norės naudotis / teikti tas pačias paslaugas kaip ir kiti bendraamžiai, todėl tai daryti grupėje yra tiesiog prasminga. Pavyzdžiui, galite pateikti spausdintuvo ar paskirstytos duomenų bazės paslaugą visiems grupės bendraamžiams.
  • Riboti ID apimtį: Vamzdžių pavadinimai derinami su grupe, kurioje jie sukurti. Jei du vamzdžiai turi tą patį pavadinimą, bet nebuvo sukurti toje pačioje grupėje, tada nekyla problemų dėl jų adresavimo.

Panagrinėkime, kaip galime sukurti ir prisijungti prie bendraamžių grupės. Metodai, kuriuos teikia Bendraamžių grupė sąsaja yra išvardyti toliau.

  • newGroup (Skelbimas pgAdv): paprastai naudojamas grupei, kuri jau egzistuoja su atrasta grupės reklama, inicijuoti
  • newGroup („PeerGroupID gid“, „Advertisement impl“, „String name“, „String description“): paprastai naudojama kuriant naujas bendraamžių grupes
  • newGroup („PeerGroupID gid“): naudojama egzistuojančiai ir paskelbtai bendraamžių grupei su tik bendraamžių grupės ID identifikuoti (gid)

Kurti bendraamžių grupes

Sukurti pagrindinę bendraamžių grupę yra gana paprasta. Pažvelkime į tam tikrą kodą:

pabandykite {// Mes sukursime naują grupę, paremtą netPeerGroup, todėl nukopijuokime jos // impl reklamą ir ją modifikuokime. ModuleImplAdvertisement implAdv = netPeerGroup.getAllPurposePeerGroupImplAdvertisement (); myPeerGroup = netPeerGroup.newGroup (null, // Sukurkite naują šios grupės grupės ID. implAdv, // Naudokite aukščiau pateiktą skelbimą. „Grupės pavadinimas“, // Tai yra grupės pavadinimas. „Grupės aprašymas“ // Tai yra grupės apibūdinimas.);

System.out.println ("--- Bendradarbiavimo grupė sėkmingai sukurta, ID:" + myPeerGroup.getPeerGroupAdvertisement (). GetID ()); // Dabar, kai grupė yra sukurta, ji automatiškai paskelbiama ir saugoma vietoje, // bet mes turime ją paskelbti nuotoliniu būdu, kad kiti bendraamžiai galėtų ją atrasti. discoveryService.remotePublish (myPeerGroup.getPeerGroupAdvertisement ()); System.out.println ("--- Publikuota bendraamžių grupės reklama nuotoliniu būdu"); } catch (e išimtis) {System.out.println ("Įvyko klaida"); e.printStackTrace (); }

Kvietimas newGroup () sukuria ir paskelbia grupę vietinėje talpykloje. Labiausiai tikėtina, kad kurdami šią reklamą norėsite paskelbti kitiems bendraamžiams, o tai galite padaryti paskambinę remotePublish (). Šis metodas perkelia bendraamžių grupės reklamą į kitus bendraamžius. Jei turite įsitikinti, kad skelbimą išsiuntėte bendraamžiams iš kito potinklio, turite įsitikinti, kad esate prisijungę prie susitikimo bendraamžio. Norėdami tai padaryti, naudokite šį kodą, jei jūsų susitikimo partneris yra tinkamai sukonfigūruotas ir sukonfigūruotas:

private void connectToRdv („PeerGroup peerGroup“) {if (rdv == null) {// Gaukite rdv paslaugą rdv = peerGroup.getRendezVousService (); } // Prieš tęsdami, įsitikinkite, kad esame prisijungę, kol (! Rdv.isConnectedToRendezVous ()) {bandykite {Thread.sleep (5000); } gaudyti (InterruptedException e1) {System.out.println ("rdv prisijungimas nutrauktas"); e1.printStackTrace (); }}} 

Prisijungimas prie bendraamžių grupių

Prisijungti prie bendraamžių grupės gali būti sunkiau, nei iš tikrųjų ją sukurti. Net jei turime neužtikrintą bendraamžių grupę, vis tiek turime sukurti įgaliojimus, tuščius prisijungimo duomenis ir išsiųsti šiuos duomenis bendraamžių grupei, prie kurios bandome prisijungti.

Kadangi turime bendraamžių grupės reklamą, turime sukurti visus reikiamus įgaliojimus ir prisijungti prie grupės. Prieš pažvelgdami į Prisijungti prie grupės() metodą, pažvelkime į vieną iš naudojamų klasių Narystės paslauga klasė. Yra trys metodai Narystės paslauga kad mes konkrečiai domimės kreiptis (), prisijungti ()ir pasitraukti(). Mes pereiname prie kreiptis () metodas pageidaujamo autentifikavimo tipą ir, jei tas tipas palaikomas, jis mums grąžina Autentifikatorius. Mes tai naudojame Autentifikatorius iš tikrųjų prisijungti prie grupės. Mes jį perduodame kaip argumentą prisijungti () metodą, ir tai patikrina mūsų įgaliojimus. Kai bendraamžis nori palikti grupę, paskambinkite pasitraukti() palengvina tai.

Dabar pažvelkime į Prisijungti prie grupės() metodas:

private void joinGroup () {// Darant prielaidą, kad „myPeerGroup“ buvo išaiškinta // prieš iškviečiant šį metodą. System.out.println ("Bandymas prisijungti prie bendraamžių grupės"); pabandykite {// Sukurti dokumentą, kuris identifikuos šį bendraamžį. StructuredDocument identityInfo = null; // Mūsų grupei nereikia identifikavimo informacijos.

AuthenticationCredential authCred = new AuthenticationCredential („myPeerGroup“, // Kolegų grupė, sukurta „null“, // autentifikavimo metodas.); MembershipService membershipService = myPeerGroup.getMembershipService (); Autentifikavimo priemonė auth = membershipService.apply (authCred); // Pažiūrėkite, ar grupė pasirengusi prisijungti. // Authenticator šiuo metu neskiria // nepavykusio ir nebaigto autentifikavimo. if (auth.isReadyForJoin ()) {Credential myCred = narystėsService.join (auth); System.out.println („Prisijungė prie„ MyPeerGroup “); System.out.println ("Grupės ID:" + myPeerGroup.getPeerGroupID ()); } else {System.out.println ("Nepavyko prisijungti prie grupės"); }} catch (e išimtis) {System.out.println ("Įvyko klaida"); e.printStackTrace (); }}

Dabar, kai sėkmingai prisijungėme prie grupės, galime įdarbinti teikiamas bendraamžių grupės paslaugas ir siųsti pranešimus nariams. Kurdami P2P programas, galvodami apie tai, kur norite, kad jūsų bendraamžių grupės ribos būtų anksčiau laiko, jums tai padės ilgainiui. Atminkite, kad bendraamžių grupės ribos gali apimti daugelį tinklų.

Prisijungimo procesas iš pradžių gali atrodyti bauginantis, tačiau kelis kartus tai padarius yra gana paprasta. Dabar galima naudoti daugybę skirtingų būdų apsaugoti bendraamžių grupę - prisijungimo proceso sudėtingumas priklauso nuo pageidaujamo autentifikavimo tipo. Aš čia neaptariu šių metodų.

Vamzdžiai

Kaip paaiškinta anksčiau, vamzdis yra virtualus dviejų bendraamžių bendravimo kanalas. Vamzdžiai gali būti painūs pradedantiesiems, nes naujokai bando juos susieti su jau žinomais lizdais. Kol aptariu vamzdžius, nepamirškite, kad jie yra daug abstraktesni nei lizdai.

Paprasčiausia forma yra dviejų tipų vamzdžiai; įvesties vamzdžiai ir išvesties vamzdžiai. Programos naudoja įvesties vamzdžius informacijai gauti, o išvesties vamzdžius - informacijai siųsti. Vamzdžiai gali būti naudojami dviem adresavimo režimais:

  • „Unicast“ (taškas į tašką) vamzdžiai: Šie vamzdžiai sujungia vieną išėjimo vamzdį su vienu įvadiniu vamzdžiu, tačiau vienas įvadas gali priimti pranešimus iš skirtingų išvesties vamzdžių
  • Skleisti vamzdžius: Šie vamzdžiai sujungia vieną išėjimo vamzdį su daugeliu skirtingų įvadinių vamzdžių

Vamzdžiai yra nepatikima, vienakryptė ir asinchroninė ryšio priemonė. Galima įdiegti vamzdžius, užtikrinančius patikimumą, dvikryptes galimybes ir saugų tranzitą.

Norėdami sukurti pypkę, pirmiausia turite sukurti reklamą ir ją paskelbti. Tada turite gauti vamzdžių paslaugą iš bendraamžių grupės ir naudoti ją vamzdžiui sukurti. Kiekvienas vamzdis turi vamzdžio ID, susietą su juo, kuris naudojamas vamzdžiui adresuoti.

Norėdami sukurti naują vamzdžio ID, naudojame IDFactory viduje konors net.jxta.id pakuotė. Čia yra pavyzdys, kaip sukurti ir atsispausdinti ID:

 ID id = IDFactory.newPipeID (peerGroup.getPeerGroupID ()); System.out.println (id.toURI ()); 

Pastaba:Bendraamžių grupė yra bendraamžių grupė, kuriai norite sukurti kūrinį.

Taigi du bendraamžiai gali bendrauti tarpusavyje, jie turi žinoti vamzdžių, su kuriais jie nori bendrauti, ID. Yra keli būdai, kaip užtikrinti, kad jie abu žinotų šią informaciją:

  • Abu bendraamžiai skaitė toje pačioje reklamoje iš bylos
  • Vamzdžių ID yra užkoduotas programose
  • Paskelbkite ir atraskite vamzdžio ID vykdymo metu
  • Vamzdžių ID generuojamas iš gerai žinomo ID