Ohjelmointi

Peer-to-peer -sovellukset on tehty helpoksi

On sanottu, että Kazaa, peer-to-peer (P2P) -tiedostonjakosovellus, aiheuttaa enemmän verkkoliikennettä kuin mikä tahansa muu sovellus. Kazaa-verkkosivustolla todetaan, että sillä on ollut yli 385 000 000 latausta! Vertailun vuoksi tarkastelin Download.comin suosituimpia latauksia, joissa Ad Aware luetellaan suosituimpana latauksena vain 117 000 000 latauksella. Download.com-sivuston 25 suosituimmasta latauksesta tunnistin 11 P2P-sovellusta. Pelkästään näiden havaintojen perusteella P2P-sovellusten suosio on ilmeisesti kasvussa. Mutta tiedostojen jakaminen ei ole ainoa P2P-sovellustyyppi. Suurin osa tyypillisen pikaviestisovelluksen toiminnoista on P2P. Muita esimerkkejä ovat foorumit ja hajautetut tietokannat. Ja luettelo vain jatkaa kasvuaan.

Tällaisten P2P-sovellusten luomiseksi sinulla on oltava keinot löytää ja olla vuorovaikutuksessa muiden ikäisensä kanssa. Suurin osa P2P-sovellusten luomiseen liittyvistä vaikeuksista liittyy vertaisverkon ylläpitoon, viestien muotoiluun ja välittämiseen, muiden ikäisensä löytämiseen ja muihin vastaaviin ongelmiin. Project Jxta ja sen Java-sidonta käsittelevät sovelluksesi näitä näkökohtia. Jxtaa käyttämällä voit keskittyä sovellukseesi, ei yleisiin P2P-ongelmiin.

Jxta on lyhennetty versio sanasta rinnastaa, mikä tarkoittaa vierekkäin. Jxta-ohjelmoijan oppaassa Jxta määritellään "avoimeksi tietokonealustaksi, joka on suunniteltu P2P-tietojenkäsittelyyn". Se ei ole spesifinen mistään alustasta eikä ohjelmointikielestä. Se suunniteltiin Sun Microsystemsissä, ja se on julkaistu avoimen lähdekoodin yhteisölle ylläpitää ja kasvaa. Julkaisun lisäksi julkaistiin alkuperäinen Java-toteutus. Keskityn kyseiseen toteutukseen tässä artikkelissa keskustellessani Jxtan käytöstä Java-ympäristössä. Käsittelen myös Jxta-sovellusten kuusi yleisintä operaatiota, jotka on toteutettu Java-ohjelmassa, ja esitän työkalut, joita tarvitset omien P2P-sovellusten kirjoittamisen aloittamiseen. Tämän artikkelin lukemisen jälkeen toivon, että ymmärrät kuinka helppoa ja jännittävää voi olla P2P-sovellusten luominen. P2P-sovellusten suosion lisäksi myös monimuotoisuuden kasvu jatkuu, ja huomisen kehittäjien on aloitettava näiden tekniikoiden oppiminen tänään pysyäkseen kärjessä.

Java ja Jxta

Ensimmäinen askel Jxta-sovelluksen käyttämiseen on ladata se Jxta-lataussivulta. Kuten useimmat lukijat ovat samaa mieltä, joskus avoimen lähdekoodin projekteja voi olla vaikea hankkia ja määrittää käyttöön. Jxta on esimerkki upeasta avoimen lähdekoodin projektista, joka on myös erittäin helppo ladata ja käyttää heti. Jos sinulla on vaikeuksia ja tarvitset lisätietoja Jxtan lataamisesta ja käytöstä, katso Jxta-ohjelmoijan opas.

Kun suoritat Jxta-yhteensopivan sovelluksen ensimmäisen kerran uudesta hakemistosta, sinulle toimitetaan GUI-konfiguraattori.

Mikä vertaisverkko tarkalleen on? Daniel Brookshiren (tunnettu Jxta-sitoutuja ja niin kutsuttu "mestari") mukaan se on "virtuaalinen viestintäkohta", jossa eri ikäisensä voivat toimia samalla laitteella. Laite ei ole rajoitettu tietokoneeseen; se voi olla matkapuhelin, palvelin tai jopa niin yksinkertainen esine kuin anturi. On olemassa erityisiä ikäisensä, joista kaksi meidän on oltava tietoisia tapaaminen ja rele. Tapahtuma-ikäisensä antaa vertaisverkostojen kommunikoida paikallisen aliverkon ulkopuolella, ja välitystoverta käytetään tietojen välittämiseen palomuurien kautta.

Aloitetaan käymällä läpi kuusi yleisintä Jxta-sovellustoimintoa, jotka on määritelty kohdassa "Jxta-käytön kustannukset" (IEEE Computer Society, syyskuu 2003). Ne on lueteltu alla siinä järjestyksessä, jossa ne tyypillisesti esiintyvät.

  1. Jxta aloitetaan: Jxtan käynnistäminen on melko yksinkertaista ja yksinkertaisesti muutaman koodirivin asia.
  2. Liittyminen vertaisryhmään: Vertaisryhmä on joukko ikäisensä kanssa, joilla on yhteiset edut, jotka on ryhmitelty yhteen. Tässä artikkelissa käsittelen nykyisten vertaisryhmien liittymistä ja uusien luomista.
  3. Mainosten julkaiseminen: Jxta on kyse yksinkertaisesti mainituista mainoksista. Jxta löytää mainoksia vertaisryhmien, vertaisryhmien ja muiden resurssien löytämiseen alustasta riippumattomalla tavalla. Keskustelen uusien mainosten lukemisesta, luomisesta ja lähettämisestä myöhemmin tässä artikkelissa.
  4. Tuloputken avaaminen: Putki on yksi mekanismi, jota vertaisryhmät käyttävät yhteydenpitoon keskenään. Putket ovat "virtuaalista viestintää kanavia"- Virtuaalinen, että putken käyttäjät eivät tiedä toisen vertaisyhteisön todellista osoitetta. Keskustelen putkien käytöstä viestien lähettämiseen tämän artikkelin putkia koskevassa osiossa.
  5. Muiden vertaisresurssien löytäminen: Ennen kuin voit kommunikoida muiden ikäisensä kanssa, sinun on ensin löydettävä joitain, joista keskustelen myös.
  6. Lähtöputken avaaminen: Lähtöputkia käytetään viestien lähettämiseen muille vertaisryhmille. Lähtöputkia on kahta luokkaa: pisteestä pisteeseen, tai yksi-yhteen, ja eteneminen, tai yksi moniin.

Nyt kun tiedät mihin tämä artikkeli vie sinut, aloitetaan matkamme.

Vertaisryhmät

Vertaisryhmät ovat yksinkertaisesti kokoelma ikäisensä kanssa, joilla on joitain yhteisiä etuja. Vertaisryhmät, kuten ikäisensä, voivat tarjota palveluja, mutta vertaisryhmäpalvelu ei välttämättä ole riippuvainen tietystä vertaisesta, joka täyttää sille esitetyt pyynnöt. Niin kauan kuin yksittäinen vertaisryhmä tarjoaa palvelua, palvelu on käytettävissä. Jokainen ikäisensä on jäsen maailman vertaisryhmä ja myös tyypillisesti netto vertaisryhmä, ja he voivat halutessaan liittyä muihin ryhmiin ja poistua niistä. Mikä on motivaatio vertaisryhmien luomiseen? Tässä on muutama syy:

  • Turvallisen alueen ylläpito: Jos sinulla on suojattu vertaisryhmä, ryhmän ikäisensä ei tarvitse paljastaa kriittisiä tietojaan.
  • Tarjoa yhteisiä palveluja: Tyypillisesti monet ikäisensä haluavat käyttää / tarjota samoja palveluja kuin muut ikäisensä, joten tekeminen ryhmässä on järkevää. Voit esimerkiksi tarjota tulostimen tai hajautetun tietokantapalvelun kaikille ryhmän vertaisryhmille.
  • Rajoita tunnuksen laajuutta: Putkien nimet sovitetaan sen ryhmän kanssa, johon ne on luotu. Jos kahdella putkella on sama nimi, mutta niitä ei ole luotu samassa ryhmässä, niiden käsittelyssä ei ole ongelmia.

Tutkitaan, miten voimme luoda vertaisryhmän ja liittyä siihen. Järjestelmän tarjoamat menetelmät Vertaisryhmä käyttöliittymä on lueteltu alla.

  • newGroup (Mainos pgAdv): käytetään tyypillisesti sellaisen ryhmän luomiseen, joka on jo olemassa löydetyn ryhmämainoksen kanssa
  • newGroup (PeerGroupID gid, Advertisement impl, String name, String description): käytetään yleensä uusien vertaisryhmien rakentamiseen
  • newGroup (PeerGroupID gid): käytetään luomaan olemassa oleva ja julkaistu vertaisryhmä, jolla on vain vertaisryhmätunnus (gid)

Vertaisryhmien luominen

Vertaisryhmän luominen on suhteellisen yksinkertaista. Katsotaanpa koodia:

kokeile {// Luomme uuden ryhmän netPeerGroupin perusteella, joten kopioidaan sen // impl-mainos ja muokataan sitä. ModuleImplAdvertisement implAdv = netPeerGroup.getAllPurposePeerGroupImplAdvertisement (); myPeerGroup = netPeerGroup.newGroup (null, // Luo uusi ryhmän tunnus tälle ryhmälle. implAdv, // Käytä yllä olevaa mainosta. "Ryhmän nimi", // Tämä on ryhmän nimi. "Ryhmän kuvaus" // Tämä on ryhmän kuvaus.);

System.out.println ("--- Vertaisryhmä luotiin onnistuneesti, tunnus:" + myPeerGroup.getPeerGroupAdvertisement (). GetID ()); // Nyt kun ryhmä on luotu, se julkaistaan ​​ja tallennetaan automaattisesti paikallisesti, // mutta meidän on julkaistava se etänä, jotta muut ikätoverit voivat löytää sen. discoveryService.remotePublish (myPeerGroup.getPeerGroupAdvertisement ()); System.out.println ("--- Julkaistu vertaisryhmäilmoitus etänä"); } catch (Poikkeus e) {System.out.println ("Tapahtui virhe"); e.printStackTrace (); }

Kutsu uusi ryhmä() luo ja julkaisee ryhmän paikalliseen välimuistiin. Todennäköisesti haluat julkaista tämän mainoksen muille ikäisillesi, kun luot sen, minkä voit tehdä soittamalla remotePublish (). Tämä menetelmä välittää vertaisryhmämainoksen muille ikäisilleen. Jos sinun on varmistettava, että lähetät mainoksen vertaiskäyttäjille toisessa aliverkossa, sinun on varmistettava, että sinulla on yhteys tapaamisvertaisiin. Voit tehdä tämän käyttämällä seuraavaa koodia olettaen, että tapaamisvertaisesi on ylöspäin ja määritetty oikein:

private void connectToRdv (PeerGroup peerGroup) {if (rdv == null) {// Hanki rdv-palvelu rdv = peerGroup.getRendezVousService (); } // Varmista, että olemme yhteydessä toisiinsa, ennen kuin jatkat, kun (! Rdv.isConnectedToRendezVous ()) {yritä {Thread.sleep (5000); } catch (InterruptedException e1) {System.out.println ("rdv-yhteys keskeytetty"); e1.printStackTrace (); }}} 

Liittyminen vertaisryhmiin

Liittyminen vertaisryhmään voi olla vaikeampaa kuin sen luominen. Vaikka meillä olisi suojaamaton vertaisryhmä, meidän on silti luotava tunnistetiedot, tyhjät tunnistetiedot ja lähetettävä nämä tunnistetiedot vertaisryhmälle, johon yritämme liittyä.

Koska meillä on vertaisryhmäilmoitus, meidän on luotava kaikki tarvittavat tunnistetiedot ja liityttävä ryhmään. Ennen kuin katsomme liittyä ryhmään() Tarkastellaan yhtä sen käyttämistä luokista, Jäsenyyspalvelu luokassa. On kolme menetelmää Jäsenyyspalvelu joista olemme kiinnostuneita Käytä(), liittyä seuraan()ja erota(). Siirrymme Käytä() method haluamasi todennustyyppi, ja jos kyseistä tyyppiä tuetaan, se palauttaa meille Todentaja. Käytämme tätä Todentaja liittyä ryhmään. Välitämme sen argumenttina liittyä seuraan() menetelmä, ja se tarkistaa tunnistetietomme. Kun vertaisryhmä haluaa poistua ryhmästä, soita erota() helpottaa tätä.

Katsotaan nyt liittyä ryhmään() menetelmä:

private void joinGroup () {// Olettaen, että myPeerGroup on instantoitu // ennen tämän menetelmän kutsumista. System.out.println ("Yritetään liittyä vertaisryhmään"); kokeile {// Luo asiakirja, joka identifioi tämän vertaisarvosanan. StructuredDocument identityInfo = tyhjä; // Ryhmällemme ei vaadita henkilöllisyystietoja.

AuthenticationCredential authCred = uusi AuthenticationCredential (myPeerGroup, // Peer-ryhmä, jonka se on luotu null-muodossa, // todennustapa.); MembershipService membershipService = myPeerGroup.getMembershipService (); Authenticator auth = jäsenyysService.apply (authCred); // Katso, onko ryhmä valmis liittymään. // Authenticator ei tee tällä hetkellä eroa // epäonnistuneen ja keskeneräisen todennuksen välillä. if (auth.isReadyForJoin ()) {Tunnistustiedot myCred = membershipService.join (auth); System.out.println ("Liittyi myPeerGroupiin"); System.out.println ("Ryhmätunnus:" + myPeerGroup.getPeerGroupID ()); } else {System.out.println ("Ryhmään ei voi liittyä"); }} catch (Poikkeus e) {System.out.println ("Tapahtui virhe"); e.printStackTrace (); }}

Nyt kun olemme onnistuneesti liittyneet ryhmään, voimme käyttää vertaisryhmäpalveluja ja lähettää viestejä jäsenille. Kun kehität P2P-sovelluksia, ajattelu siitä, mihin haluat vertaisryhmäsi rajat etukäteen, auttaa sinua pitkällä aikavälillä. Muista, että vertaisryhmärajat voivat ulottua moniin verkkoihin.

Liittymisprosessi voi tuntua aluksi pelottavalta, mutta se on melko suoraviivainen, kun teet sen muutaman kerran. Nyt vertaisryhmän turvaamiseksi on mahdollista käyttää monia erilaisia ​​menetelmiä - liittymisprosessin monimutkaisuus riippuu halutun todennuksen tyypistä. En keskustele näistä menetelmistä täällä.

Putket

Kuten aiemmin selitettiin, putki on virtuaalinen viestintäkanava kahden ikäisensä välillä. Putket voivat olla hämmentäviä aloittelijoille, koska aloittelijat yrittävät liittää heidät siihen, mitä he jo tietävät - pistorasioihin. Vaikka keskustelen putkista, pidä mielessä, että ne ovat paljon abstraktimpia kuin pistorasiat.

Perusmuodossa putkia on kahden tyyppisiä; tulo- ja lähtöputket. Sovellukset käyttävät tuloputkia tietojen vastaanottamiseen ja lähtöputket tietojen lähettämiseen. Putkia voidaan käyttää kahdessa osoitetilassa:

  • Yksilähetetyt (pisteestä pisteeseen) putket: Nämä putket yhdistävät yhden lähtöputken yhteen tuloputkeen, mutta yksi tuloputki voi vastaanottaa viestejä eri lähtöputkista
  • Levitä putket: Nämä putket yhdistävät yhden lähtöputken moniin erilaisiin tuloputkiin

Putket ovat epäluotettava, yksisuuntainen ja asynkroninen viestintäväline. Saatavana on valmiiksi toteutettuja putkien toteutuksia, jotka tarjoavat luotettavuutta, kaksisuuntaisia ​​ominaisuuksia ja turvallisen kuljetuksen.

Putken luomiseksi sinun on ensin luotava putkimainos ja julkaistava se. Sitten sinun on hankittava putkipalvelu vertaisryhmältä ja käytettävä sitä putken luomiseen. Jokaisella putkella on liitetty putketunnus, jota käytetään putken osoittamiseen.

Uuden putkitunnuksen luomiseen käytämme IDFactory että net.jxta.id paketti. Tässä on esimerkki tunnuksen luomisesta ja tulostamisesta:

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

merkintä:vertaisryhmä on vertaisryhmä, jolle haluat luoda putken.

Joten kaksi ikätoveria voivat olla yhteydessä toisiinsa, heidän on tiedettävä niiden putkien putkitunnukset, joiden kanssa he haluavat olla yhteydessä. On olemassa muutama tapa varmistaa, että molemmat tietävät nämä tiedot:

  • Molemmat ikäisensä lukivat samasta putkimainoksesta tiedostosta
  • Putkitunnus koodataan kovasti sovelluksiin
  • Julkaise ja löydä putkitunnus ajon aikana
  • Putkitunnus luodaan tunnetusta tunnuksesta