Programmēšana

Vienkāršas lietojumprogrammas vienādranga lietošanai

Ir teikts, ka vienādranga (P2P) failu koplietošanas lietojumprogramma Kazaa rada lielāku tīkla trafiku nekā jebkura cita lietojumprogramma. Kazaa vietne norāda, ka tā ir lejupielādējusi vairāk nekā 385 000 000! Salīdzinājumam es apskatīju Download.com populārākās lejupielādes, kurās Ad Aware ir iekļautas kā vispopulārākās lejupielādes, tikai ar lejupielādēm tikai 117 000 000. No Download.com 25 populārākajām lejupielādēm es atpazinu 11 P2P lietojumprogrammas. Tikai no šiem novērojumiem P2P lietojumprogrammu popularitāte acīmredzami pieaug. Bet failu koplietošana nav vienīgais P2P lietojumprogrammas veids. Lielākā daļa tipiskas tūlītējās ziņojumapmaiņas lietojumprogrammas darbību ir P2P. Citi piemēri ir forumi un izplatītas datu bāzes. Un saraksts tikai turpina pieaugt.

Lai izveidotu šādas P2P lietojumprogrammas, jums ir jābūt līdzekļiem, lai atklātu un mijiedarbotos ar citiem vienaudžiem. Lielākā daļa grūtību, kas saistītas ar P2P lietojumprogrammu izveidi, ir saistītas ar vienaudžu tīkla uzturēšanu, ziņojumu formatēšanu un pārsūtīšanu, citu vienaudžu atklāšanu un citām līdzīgām problēmām. Projekts Jxta un tā Java saistīšana apstrādā šos jūsu lietojumprogrammas aspektus. Izmantojot Jxta, varat koncentrēties uz lietojumprogrammu, nevis uz vispārīgiem P2P jautājumiem.

Jxta ir saīsināta vārda versija blakus, kas nozīmē blakus. Jxta programmētāja rokasgrāmatā Jxta ir definēta kā "atvērta skaitļošanas platforma, kas paredzēta P2P skaitļošanai". Tas nav specifisks ne jebkurai platformai, ne programmēšanas valodai. Tas tika izveidots vietnē Sun Microsystems un ir izlaists atklātā pirmkoda kopienai, lai uzturētu un augtu. Kopā ar tā izlaišanu tika izdota sākotnējā Java ieviešana. Šajā rakstā es koncentrējos uz šo ieviešanu, apspriežot, kā lietot Jxta Java vidē. Es arī aplūkoju sešas visizplatītākās Jxta lietojumprogrammu darbības, kas ieviestas Java, un iepazīstinu ar rīkiem, kas nepieciešami, lai sāktu rakstīt savas P2P lietojumprogrammas. Izlasot šo rakstu, es ceru, ka jūs sapratīsit, cik viegli un aizraujoši var būt P2P lietojumprogrammu izveide. P2P lietojumprogrammas turpinās pieaugt ne tikai popularitātē, bet arī daudzveidībā, un rītdienas izstrādātājiem šīs tehnoloģijas jāsāk mācīties jau šodien, lai saglabātu līderpozīcijas.

Java un Jxta

Pirmais Jxta izmantošanas solis ir tā lejupielāde no Jxta lejupielāžu lapas. Tā kā lielākā daļa lasītāju piekritīs, dažreiz atvērtā koda projektus var būt grūti iegūt un konfigurēt lietošanai. Jxta ir lieliska atvērtā koda projekta piemērs, kas arī ir ļoti viegli lejupielādēt un lietot uzreiz. Ja jums klājas grūti un jums nepieciešama plašāka informācija par Jxta lejupielādi un lietošanu, skatiet Jxta programmētāja rokasgrāmatu.

Kad pirmo reizi palaižat Jxta iespējotu lietojumprogrammu no jauna direktorija, jums tiks nodrošināts GUI konfigurators.

Kas īsti ir vienaudžs? Pēc Daniela Brookshire (plaši pazīstams Jxta izpildītājs un tā dēvētais "čempions") teiktais, tas ir "virtuāls saziņas punkts", kur dažādi vienaudži var darboties vienā ierīcē. Ierīce neaprobežojas tikai ar datoru; tas var būt mobilais tālrunis, serveris vai pat tik vienkāršs priekšmets kā sensors. Ir īpaši vienaudži, divi, par kuriem mums jāzina satikšanās un stafete. Satikšanās vienaudzis ļauj vienaudžiem sazināties ārpus lokālā apakštīkla darbības jomas, un informācijas pārraidi caur ugunsmūri izmanto relay peer.

Sāksim, pārejot uz sešām visizplatītākajām Jxta lietojumprogrammu darbībām, kā noteikts sadaļā "Jxta lietošanas izmaksas" (IEEE Computer Society, 2003. gada septembris). Tie ir uzskaitīti zemāk tādā secībā, kādā tie parasti notiek.

  1. Sākot ar Jxta: Jxta palaišana ir diezgan vienkārša un vienkārši ir saistīta ar dažām koda rindām.
  2. Pievienošanās vienaudžu grupai: Vienaudžu grupa ir vienaudžu kopums, kuriem ir kopīgas interešu grupas, kas ir sagrupētas. Šajā rakstā es aplūkoju pievienošanos esošajām vienaudžu grupām un jaunu grupu izveidi.
  3. Sludinājumu publicēšana: Vienkārši paziņotie sludinājumi ir Jxta mērķis. Jxta izmanto reklāmu, lai neatkarīgi no platformas atklātu vienaudžus, vienaudžu grupas un citus resursus. Es apspriedīšu jaunu sludinājumu lasīšanu, izveidošanu un nosūtīšanu vēlāk šajā rakstā.
  4. Ieejas caurules atvēršana: Caurule ir viens mehānisms, ko vienaudži izmanto, lai sazinātos savā starpā. Caurules ir "virtuālā komunikācija kanālus"- Virtuāli šajā caurules lietotāji nezina otra vienaudža faktisko adresi. Es runāju par cauruļu izmantošanu ziņojumu sūtīšanai šī raksta sadaļā par caurulēm.
  5. Citu vienaudžu resursu atklāšana: Pirms varat sazināties ar citiem vienaudžiem, vispirms jāatrod daži, kurus es arī apspriedīšu.
  6. Izvades caurules atvēršana: Izejas caurules tiek izmantotas ziņojumu sūtīšanai citiem vienaudžiem. Ir divas izejas cauruļu klases: punkts uz punktu, vai viens pret vienu, un pavairošana, vai viens pret daudziem.

Tagad, kad jūs zināt, kurp jūs aizvedīs šis raksts, sāksim savu ceļu.

Vienaudžu grupas

Vienaudžu grupas ir vienkārši vienaudžu kopums ar zināmām kopīgām interesēm. Vienaudžu grupas, tāpat kā vienaudži, var sniegt pakalpojumus, tomēr vienaudžu grupas pakalpojumi nav obligāti atkarīgi no konkrēta vienaudža, kas izpilda pieprasījumus. Kamēr pakalpojumu sniedz viens grupas vienaudzis, pakalpojums ir pieejams. Katrs vienaudžs ir pasaules vienaudžu grupa un arī parasti neto vienaudžu grupa, un var izvēlēties pievienoties un pamest citas grupas pēc vēlēšanās. Kāda ir motivācija veidot vienaudžu grupas? Šeit ir daži iemesli:

  • Uzturēt drošu reģionu: Ja jums ir droša vienaudžu grupa, grupas vienaudžiem nav jāatklāj viņu kritiskā informācija.
  • Nodrošiniet kopīgus pakalpojumus: Parasti daudzi vienaudži vēlēsies izmantot / sniegt tos pašus pakalpojumus kā citi vienaudži, tāpēc darīt to grupā ir tikai jēga. Piemēram, jūs varat nodrošināt printeri vai izplatītu datu bāzes pakalpojumu visiem grupas vienaudžiem.
  • Ierobežot ID darbības jomu: Cauruļu nosaukumi tiek saskaņoti ar grupu, kurā tie ir izveidoti. Ja divām caurulēm ir vienāds nosaukums, bet tās nav izveidotas vienā grupā, tad ar to adresēšanu nav problēmu.

Pārbaudīsim, kā mēs varam izveidot vienaudžu grupu un pievienoties tai. Metodes, ko nodrošina Vienaudžu grupa interfeiss ir uzskaitīti zemāk.

  • newGroup (Advertisement pgAdv): parasti izmanto, lai parādītu grupu, kas jau pastāv ar atklāto grupas reklāmu
  • newGroup (PeerGroupID gid, Advertisement impl, String name, String description): parasti izmanto, lai izveidotu jaunas vienaudžu grupas
  • newGroup (PeerGroupID gid): izmanto, lai izveidotu esošo un publicēto vienaudžu grupu, izmantojot tikai vienaudžu grupas ID (gid)

Vienaudžu grupu veidošana

Vienaudžu pamata grupas izveidošana ir samērā vienkārša. Apskatīsim kodu:

mēģiniet {// Mēs izveidosim jaunu grupu, kuras pamatā ir netPeerGroup, tāpēc kopēsim tās // impl reklāmu un modificēsim to. ModuleImplAdvertisement implAdv = netPeerGroup.getAllPurposePeerGroupImplAdvertisement (); myPeerGroup = netPeerGroup.newGroup (null, // Izveidojiet jaunu grupas ID šai grupai. implAdv, // Izmantojiet iepriekš minēto sludinājumu. "Grupas nosaukums", // Tas ir grupas nosaukums. "Grupas apraksts" // Šis ir grupas apraksts.);

System.out.println ("--- Peer grupa ir veiksmīgi izveidota, id:" + myPeerGroup.getPeerGroupAdvertisement (). GetID ()); // Tagad, kad grupa ir izveidota, tā tiek automātiski publicēta un saglabāta lokāli, // taču mums tā jāpublicē attālināti, lai citi vienaudži to varētu atklāt. discoveryService.remotePublish (myPeerGroup.getPeerGroupAdvertisement ()); System.out.println ("--- publicēta vienaudžu grupas reklāma attālināti"); } catch (izņēmums e) {System.out.println ("Radās kļūda"); e.printStackTrace (); }

Zvans uz newGroup () izveido un publicē grupu lokālajā kešatmiņā. Visticamāk, izveidojot šo reklāmu, jūs vēlaties to publicēt citiem vienaudžiem, ko varat izdarīt, zvanot remotePublish (). Šī metode vienaudžu grupas reklāmu virzīs uz citiem vienaudžiem. Ja jums ir jāpārliecinās, vai reklāma ir nosūtīta vienaudžiem citā apakštīklā, jums jāpārliecinās, vai esat izveidojis savienojumu ar tikšanās vienaudžiem. Lai to izdarītu, izmantojiet šo kodu, pieņemot, ka jūsu satikšanās vienaudžs ir izveidots un pareizi konfigurēts:

private void connectToRdv (PeerGroup peerGroup) {if (rdv == null) {// Iegūstiet pakalpojumu rdv rdv = peerGroup.getRendezVousService (); } // Pārliecinieties, vai esam savienoti, pirms turpināt, kamēr (! Rdv.isConnectedToRendezVous ()) {mēģiniet {Thread.sleep (5000); } catch (InterruptedException e1) {System.out.println ("pārtraukts rdv savienojums"); e1.printStackTrace (); }}} 

Pievienošanās vienaudžu grupām

Pievienošanās vienaudžu grupai var būt grūtāk, nekā faktiski to izveidot. Pat ja mums ir nenodrošināta vienaudžu grupa, mums joprojām ir jāizveido akreditācijas dati, tukši akreditācijas dati un šie akreditācijas dati jānosūta vienaudžu grupai, kurai cenšamies pievienoties.

Tā kā mums ir vienaudžu grupas reklāma, mums ir jāizveido visi nepieciešamie akreditācijas dati un jāpievienojas grupai. Pirms mēs apskatām pievienoties grupai() metodi, aplūkosim vienu no klasēm, kuras tā izmanto DalībaPakalpojums klasē. Ir trīs metodes DalībaPakalpojums kas mūs īpaši interesē pieteikties (), pievienoties (), un atkāpties (). Mēs pārejam uz pieteikties () metode vēlamo autentifikācijas veidu, un, ja šis tips tiek atbalstīts, tas mums atgriež Autentifikators. Mēs to izmantojam Autentifikators lai faktiski pievienotos grupai. Mēs to nododam kā argumentu pievienoties () metodi, un tā pārbauda mūsu akreditācijas datus. Kad vienaudzis vēlas pamest grupu, zvans uz atkāpties () to atvieglo.

Tagad apskatīsim pievienoties grupai() metode:

private void joinGroup () {// Pieņemot, ka myPeerGroup ir instantiated // pirms šīs metodes izsaukšanas. System.out.println ("Mēģina pievienoties vienaudžu grupai"); mēģiniet {// Izveidot dokumentu, kas identificēs šo vienaudžu. StructuredDocument identitāteInfo = null; // Mūsu grupai nav nepieciešama identitātes informācija.

AuthenticationCredential authCred = jauns AuthenticationCredential (myPeerGroup, // vienaudžu grupa, kuru tā ir izveidota ar nulli, // autentifikācijas metode.); MembershipService membershipService = myPeerGroup.getMembershipService (); Autentifikators auth = membershipService.apply (authCred); // Pārbaudiet, vai grupa ir gatava pievienoties. // Authenticator šobrīd nenošķir // neveiksmīgu un nepabeigtu autentifikāciju. if (auth.isReadyForJoin ()) {akreditācijas dati myCred = membershipService.join (auth); System.out.println ("Pievienojies myPeerGroup"); System.out.println ("Grupas ID:" + myPeerGroup.getPeerGroupID ()); } else {System.out.println ("Nevar pievienoties grupai"); }} catch (izņēmums e) {System.out.println ("Radās kļūda"); e.printStackTrace (); }}

Tagad, kad esam veiksmīgi pievienojušies grupai, mēs varam izmantot piedāvātos vienaudžu grupas pakalpojumus un nosūtīt ziņojumus dalībniekiem. Izstrādājot P2P lietojumprogrammas, domājot par to, kur vēlaties vienaudžu grupas robežas pirms laika, jums palīdzēs ilgtermiņā. Paturiet prātā, ka vienaudžu grupas robežas var aptvert daudzus tīklus.

Sākumā pievienošanās process var šķist biedējošs, taču tas ir diezgan vienkāršs, kad to izdarāt pāris reizes. Tagad vienaudžu grupas nodrošināšanai ir iespējams izmantot daudzas dažādas metodes - pievienošanās procesa sarežģītība ir atkarīga no vēlamās autentifikācijas veida. Es šeit neapspriežu šīs metodes.

Caurules

Kā paskaidrots iepriekš, caurule ir virtuāls saziņas kanāls starp diviem vienaudžiem. Caurules iesācējiem var radīt neskaidrības, jo iesācēji mēģina viņus saistīt ar to, ko viņi jau zina - kontaktligzdām. Kamēr es apspriežu caurules, paturiet prātā, ka tās ir daudz abstraktākas nekā ligzdas.

Pamata formā ir divu veidu caurules; ieejas caurules un izejas caurules. Lietojumprogrammas izmanto ievades caurules, lai saņemtu informāciju, un izvades caurules, lai nosūtītu informāciju. Caurules var izmantot divos adresēšanas režīmos:

  • Unicast (point-to-point) caurules: Šīs caurules savieno vienu izejas cauruli ar vienu ieejas cauruli, bet viena ieejas caurule var saņemt ziņojumus no dažādām izejas caurulēm
  • Pavairot caurules: Šīs caurules savieno vienu izejas cauruli ar daudzām dažādām ieejas caurulēm

Caurules ir neuzticams, vienvirziena un asinhrons saziņas līdzeklis. Ir pieejamas cauruļu ieviešanas iespējas, kas nodrošina uzticamību, divvirzienu iespējas un drošu tranzītu.

Lai izveidotu pīpi, vispirms jāizveido pīpes reklāma un tā jāpublicē. Tad jums ir jāsaņem cauruļu pakalpojums no vienaudžu grupas un jāizmanto tas, lai izveidotu cauruli. Katrai caurulei ir piesaistīts caurules ID, ko izmanto caurules adresēšanai.

Lai izveidotu jaunu caurules ID, mēs izmantojam IDFactory iekš net.jxta.id iepakojums. Šeit ir paraugs, kā izveidot un izdrukāt ID:

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

Piezīme:vienaudžu grupa ir vienaudžu grupa, kurai vēlaties izveidot pīpi.

Tātad divi vienaudži var sazināties savā starpā, viņiem jāzina to cauruļu ID, ar kurām viņi vēlas sazināties. Ir daži veidi, kā pārliecināties, ka viņi abi zina šo informāciju:

  • Abi vienaudži vienā failā lasīja no faila
  • Cauruļu ID ir grūti kodēts lietojumprogrammās
  • Izpildes laikā publicējiet un atrodiet caurules ID
  • Cauruļu ID tiek ģenerēts no labi pazīstama ID
$config[zx-auto] not found$config[zx-overlay] not found