Programovanie

Aplikácie typu peer-to-peer sú jednoduché

Hovorilo sa, že Kazaa, aplikácia na zdieľanie súborov peer-to-peer (P2P), spôsobuje viac sieťového prenosu ako akákoľvek iná aplikácia. Webová stránka Kazaa uvádza, že má za sebou viac ako 385 000 000 stiahnutí! Pre porovnanie som si prezeral najčastejšie sťahované súbory zo stránok Download.com, ktoré ako najpopulárnejšie sťahované súbory uvádzajú Ad Aware, a to iba 117 000 000 stiahnutí. Z 25 najlepších stiahnutí z webu Download.com som rozpoznal 11 aplikácií P2P. Len z týchto pozorovaní vyplýva, že popularita aplikácií P2P očividne rastie. Zdieľanie súborov však nie je jediným typom aplikácie P2P. Väčšina operácií typickej aplikácie na zasielanie okamžitých správ je P2P. Ďalším príkladom sú fóra a distribuované databázy. A zoznam sa stále rozširuje.

Aby ste mohli vytvárať také P2P aplikácie, musíte mať prostriedky na objavovanie a interakciu s ostatnými kolegami. Väčšina problémov spojených s vytváraním aplikácií P2P súvisí s udržiavaním siete rovnocenných počítačov, formátovaním a odovzdávaním správ, objavovaním ďalších rovnocenných serverov a inými podobnými problémami. Project Jxta a jeho väzba Java zvládajú tieto aspekty vašej aplikácie. Pomocou Jxta sa môžete sústrediť na svoju aplikáciu, nie na všeobecné problémy P2P.

Jxta je skrátená verzia slova juxtapose, čo znamená bok po boku. Sprievodca programátora Jxta definuje Jxta ako „otvorenú výpočtovú platformu určenú pre výpočty P2P“. Nie je špecifický pre žiadnu platformu ani pre žiadny programovací jazyk. Bol navrhnutý v spoločnosti Sun Microsystems a bol prepustený komunite otvorených zdrojov s cieľom zachovať a rásť. Spolu s jeho vydaním bola vydaná počiatočná implementácia Java. Na túto implementáciu sa zameriavam v tomto článku, keď diskutujem o tom, ako používať Jxta v prostredí Java. Ďalej sa venujem šiestim najbežnejším operáciám aplikácií Jxta implementovaných v prostredí Java a predstavím nástroje, ktoré potrebujete na začatie písania vlastných aplikácií P2P. Po prečítaní tohto článku dúfam, že ste si uvedomili, aké ľahké a vzrušujúce môže byť vytváranie aplikácií P2P. Aplikácie P2P budú aj naďalej rásť nielen v popularite, ale aj v rozmanitosti a vývojári zajtrajška sa musia začať učiť tieto technológie už dnes, aby si udržali špicu.

Java a Jxta

Prvým krokom k použitiu Jxta je jeho stiahnutie zo stránky na stiahnutie Jxta. Ako bude väčšina čitateľov súhlasiť, niekedy môže byť ťažké získať a nakonfigurovať projekty otvoreného zdroja na použitie. Jxta je príkladom skvelého open source projektu, ktorý tiež je veľmi jednoduché stiahnutie a použitie ihneď. Ak máte ťažkosti a potrebujete viac informácií o sťahovaní a používaní Jxta, pozrite si Príručku programátora Jxta.

Pri prvom spustení aplikácie s povoleným Jxta z nového adresára sa vám poskytne konfigurátor GUI.

Čo je to vlastne rovesník? Podľa Daniela Brookshireho (známeho sprostredkovateľa Jxta a takzvaného „šampióna“) ide o „bod virtuálnej komunikácie“, kde môžu na rovnakom zariadení bežať rôzni rovesníci. Zariadenie sa neobmedzuje iba na PC; môže to byť mobilný telefón, server alebo dokonca položka tak jednoduchá ako snímač. Existujú špeciálni kolegovia, tí dvaja, ktorých si musíme uvedomiť, sú stretnutie a štafeta. Stretnutie typu rendezvous peer umožňuje kolegom komunikovať mimo rozsahu lokálnej podsiete a na prenos informácií cez brány firewall sa používa relé peer.

Začnime tým, že prejdeme k šiestim najbežnejším operáciám aplikácie Jxta, ako sú definované v časti „Náklady na používanie Jxta“ (IEEE Computer Society, september 2003). Ďalej sú uvedené v poradí, v akom sa zvyčajne vyskytujú.

  1. Spustenie Jxta: Spustenie Jxty je dosť jednoduché a jednoducho otázkou niekoľkých riadkov kódu.
  2. Pripojenie sa k rovnocennej skupine: Rovesnícka skupina je skupina rovesníkov, ktorí majú spoločný súbor záujmov a boli zoskupení. V tomto článku sa venujem spojeniu s existujúcimi rovnocennými skupinami a vytvoreniu nových.
  3. Zverejnenie inzerátov: Zjednodušene povedané, o reklamu ide hlavne o reklamu. Spoločnosť Jxta používa reklamu na objavovanie kolegov, skupín kolegov a ďalších zdrojov spôsobom nezávislým na platforme. O čítaní, vytváraní a zasielaní nových reklám hovorím ďalej v tomto článku.
  4. Otvorenie vstupného potrubia: Rúrka je jeden mechanizmus, ktorý kolegovia používajú na vzájomnú komunikáciu. Rúry sú „virtuálna komunikácia kanály„—Virtuálne v tom, že používatelia rúrok nepoznajú skutočnú adresu druhého partnera. O používaní rúrok na odosielanie správ diskutujem v časti tohto článku o rúrach.
  5. Objavovanie ďalších partnerských zdrojov: Predtým, ako budete môcť komunikovať s ostatnými kolegami, musíte si najskôr nájsť niektoré, o ktorých tiež budem diskutovať.
  6. Otvorenie výstupného potrubia: Výstupné kanály sa používajú na odosielanie správ iným kolegom. Existujú dve triedy výstupných potrubí: bod-bod, alebo one-to-one, a rozmnožovanie, alebo jedna k mnohým.

Teraz, keď viete, kam vás tento článok zavedie, začnime našu cestu.

Rovesnícke skupiny

Rovesnícke skupiny sú jednoducho kolekciou rovesníkov, ktorí majú spoločné záujmy. Rovesnícke skupiny, podobne ako rovesníci, môžu poskytovať služby, ale služba rovesníckej skupiny nemusí nevyhnutne závisieť od konkrétneho rovesníka, ktorý spĺňa jeho požiadavky. Pokiaľ službu poskytuje jeden rovnocenný člen v skupine, je služba k dispozícii. Každý rovesník je členom organizácie svetová skupina rovesníkov a tiež zvyčajne čistá skupina rovesníkov, a môže sa rozhodnúť, či sa pripojí k iným skupinám alebo ich nechá podľa ľubovôle. Aká je motivácia pre vytváranie rovnocenných skupín? Tu je niekoľko dôvodov:

  • Udržiavajte bezpečný región: Ak máte zabezpečenú rovnocennú skupinu, rovesníci v skupine nemusia zverejňovať svoje kritické informácie.
  • Poskytovať spoločné služby: Mnoho rovesníkov bude zvyčajne chcieť využívať / poskytovať rovnaké služby ako ostatní rovesníci, takže to v skupine má zmysel. Môžete napríklad poskytnúť tlačiareň alebo distribuovanú databázovú službu všetkým rovesníkom v skupine.
  • Rozsah ID limitu: Názvy potrubí sú priradené k skupine, v ktorej sú vytvorené. Ak majú dve kanály rovnaký názov, ale neboli vytvorené v tej istej skupine, nie sú problémy s ich adresovaním.

Poďme preskúmať, ako môžeme vytvoriť a pripojiť sa k rovnocennej skupine. Metódy poskytované PeerGroup rozhranie sú uvedené nižšie.

  • newGroup (reklama pgAdv): zvyčajne sa používa na vytvorenie inštancie skupiny, ktorá už existuje s objavenou reklamou skupiny
  • newGroup (PeerGroupID gid, impl. reklamy, názov reťazca, popis reťazca): obvykle sa používa na vytvorenie nových rovnocenných skupín
  • newGroup (PeerGroupID gid): slúži na vytvorenie inštancie existujúcej a zverejnenej skupiny peer iba s ID skupiny peer (gid)

Vytváranie rovnocenných skupín

Vytvorenie základnej rovnocennej skupiny je pomerne jednoduché. Pozrime sa na nejaký kód:

skúsiť {// Vytvoríme novú skupinu založenú na netPeerGroup, tak poďme skopírovať jej // impl reklamu a upraviť ju. ModuleImplAdvertisement implAdv = netPeerGroup.getAllPurposePeerGroupImplAdvertisement (); myPeerGroup = netPeerGroup.newGroup (null, // Vytvorte nové ID skupiny pre túto skupinu. implAdv, // Použite vyššie uvedený inzerát. „Názov skupiny“, // Toto je názov skupiny. „Popis skupiny“ // Toto je popis skupiny.);

System.out.println ("--- Peer skupina bola úspešne vytvorená, id:" + myPeerGroup.getPeerGroupAdvertisement (). GetID ()); // Teraz, keď je skupina vytvorená, je automaticky publikovaná a uložená lokálne, // ale musíme ju zverejniť na diaľku, aby ju mohli nájsť ostatní kolegovia. discoveryService.remotePublish (myPeerGroup.getPeerGroupAdvertisement ()); System.out.println ("--- Vzdialene zverejnená skupinová reklama"); } catch (Výnimka e) {System.out.println ("Vyskytla sa chyba"); e.printStackTrace (); }

Výzva na newGroup () vytvorí a zverejní skupinu v lokálnej pamäti cache. S najväčšou pravdepodobnosťou budete chcieť túto reklamu zverejniť iným kolegom, keď ju vytvoríte, čo môžete urobiť zavolaním remotePublish (). Táto metóda posunie inzerát partnerskej skupiny k iným kolegom. Ak sa potrebujete ubezpečiť, že posielate reklamu kolegom v inej podsieti, musíte sa ubezpečiť, že ste pripojení k stretnutému partnerovi. Ak to chcete urobiť, použite nasledujúci kód za predpokladu, že váš partnerský server stretnutia je pripravený a správne nakonfigurovaný:

private void connectToRdv (PeerGroup peerGroup) {if (rdv == null) {// Získajte službu rdv rdv = peerGroup.getRendezVousService (); } // Pred pokračovaním sa uistite, že sme pripojení while (! Rdv.isConnectedToRendezVous ()) {try {Thread.sleep (5000); } catch (InterruptedException e1) {System.out.println ("rdv pripojenie prerušené"); e1.printStackTrace (); }}} 

Pripojenie sa k rovnocenným skupinám

Pripojenie sa k rovnocennej skupine môže byť zložitejšie ako vytvorenie skupiny. Aj keď máme nezabezpečenú rovnocennú skupinu, stále musíme vytvárať poverenia, vyprázdňovať poverenia a posielať tieto poverenia do rovnocennej skupiny, ku ktorej sa pokúšame pripojiť.

Pretože máme partnerský inzerát skupiny, musíme vytvoriť všetky potrebné poverenia a pripojiť sa k skupine. Skôr ako sa pozrieme na pridať sa do skupiny() metóda, pozrime sa na jednu z tried, ktoré používa, na Služba členstva trieda. V systéme sú tri metódy Služba členstva o ktoré sa konkrétne zaujímame použiť (), pripojiť sa ()a rezignovať (). Prejdeme k použiť () metóda požadovaný typ autentifikácie, a ak je tento typ podporovaný, vráti nám Authenticator. Toto používame Authenticator skutočne sa pripojiť k skupine. Predávame to ako argument pripojiť sa () metódou a overuje to naše poverenia. Keď chce rovesník opustiť skupinu, hovor na rezignovať () uľahčuje to.

Teraz sa pozrime na pridať sa do skupiny() metóda:

private void joinGroup () {// Za predpokladu, že myPeerGroup bola vytvorená inštancia // pred volaním tejto metódy. System.out.println ("Pokúšam sa pripojiť k rovnocennej skupine"); skúste {// Vytvorte dokument, ktorý bude totožný s týmto kolegom. StructuredDocument identityInfo = null; // Pre našu skupinu nie sú potrebné žiadne informácie o totožnosti.

AuthenticationCredential authCred = nový AuthenticationCredential (myPeerGroup, // skupina Peer, ktorá je vytvorená v null, // metóda overovania.); MembershipService membershipService = myPeerGroup.getMembershipService (); Authenticator auth = membershipService.apply (authCred); // Zistite, či je skupina pripravená na pripojenie. // Authenticator v súčasnosti nerozlišuje medzi // neúspešnou a nedokončenou autentifikáciou. if (auth.isReadyForJoin ()) {Credential myCred = membershipService.join (auth); System.out.println ("Joined myPeerGroup"); System.out.println ("ID skupiny:" + myPeerGroup.getPeerGroupID ()); } else {System.out.println ("Nemôžem sa pripojiť k skupine"); }} catch (Výnimka e) {System.out.println ("Vyskytla sa chyba"); e.printStackTrace (); }}

Teraz, keď sme sa úspešne pridali k skupine, sme schopní využívať poskytované služby partnerskej skupiny a posielať správy členom. Pri vývoji aplikácií P2P vám z dlhodobého hľadiska pomôže dlhodobé premýšľanie o tom, kde chcete mať hranice svojich vrstevníkov vopred. Pamätajte, že hranice skupín podobných používateľov sa môžu vzťahovať na mnoho sietí.

Proces pripájania sa na prvý pohľad môže zdať ako odstrašujúci, ale keď to urobíte niekoľkokrát, bude to celkom jednoduché. Teraz je možné na zabezpečenie partnerskej skupiny použiť mnoho rôznych metód - zložitosť procesu pripájania závisí od požadovaného typu autentifikácie. Nehovorím tu o týchto metódach.

Rúry

Ako už bolo vysvetlené skôr, kanál je virtuálny komunikačný kanál medzi dvoma rovnocennými počítačmi. Rúry môžu byť pre začiatočníkov mätúce, pretože nováčikovia sa ich snažia spojiť s tým, čo už vedia - zásuvkami. Aj keď diskutujem o fajkách, nezabudnite, že sú oveľa abstraktnejšie ako zásuvky.

V najzákladnejšej podobe existujú dva typy rúr; vstupné a výstupné potrubia. Aplikácie používajú vstupné kanály na príjem informácií a výstupné kanály na odosielanie informácií. Rúry je možné použiť v dvoch režimoch adresovania:

  • Rúry Unicast (bod-bod): Tieto kanály spájajú jedno výstupné potrubie s jedným vstupným potrubím, ale jedno vstupné potrubie môže prijímať správy z rôznych výstupných potrubí
  • Rozmnožte rúry: Tieto potrubia spájajú jedno výstupné potrubie s mnohými rôznymi vstupnými potrubiami

Rúry sú nespoľahlivým, jednosmerným a asynchrónnym komunikačným prostriedkom. K dispozícii sú vylepšené implementácie potrubí, ktoré poskytujú spoľahlivosť, obojsmerné schopnosti a bezpečný prenos.

Ak chcete vytvoriť fajku, najskôr musíte vytvoriť reklamu na fajku a zverejniť ju. Potom musíte získať potrubnú službu od partnerskej skupiny a použiť ju na vytvorenie potrubia. Ku každému kanálu je priradené ID potrubia, ktoré sa používa na adresu potrubia.

Na vytvorenie nového ID potrubia používame IDFactory v net.jxta.id balíček. Tu je príklad toho, ako vytvoriť a vytlačiť ID:

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

Poznámka:peerGroup je rovnocenná skupina, pre ktorú chcete vytvoriť kanál.

Takže dvaja rovesníci môžu navzájom komunikovať, musia poznať ID potrubí, s ktorými chcú komunikovať. Existuje niekoľko spôsobov, ako zabezpečiť, aby obaja poznali tieto informácie:

  • Obaja rovesníci čítajú v tej istej reklame na fajku zo súboru
  • ID potrubia je pevne zakódované do aplikácií
  • Publikujte a objavte ID potrubia za behu
  • ID potrubia sa generuje zo známeho ID
$config[zx-auto] not found$config[zx-overlay] not found