Pilve mÀngimine avatud lÀhtekoodiga WebRTC-l: p2p, mitmikmÀng, null viivitus

Pilve mÀngimine avatud lÀhtekoodiga WebRTC-l: p2p, mitmikmÀng, null viivitus
Tarkvara teenusena, infrastruktuur teenusena, platvorm teenusena, suhtlusplatvorm teenusena, videokonverentsid teenusena, aga kuidas on lood mÀngimisega teenusena? On tehtud mitmeid katseid mÀngude pilve viimiseks (Cloud Gaming), nÀiteks Google'i hiljuti lansseeritud Stadia. Stadia, kuid kas teised saavad kasutada WebRTC-d sama hÀsti?

Thanh Nguyen otsustas seda vĂ”imalust kontrollida oma avatud lĂ€htekoodiga projektis CloudRetro. CloudRetro pĂ”hineb Pionil, populaarne WebRTC raamatukogu Go pĂ”hjal (tĂ€nu Shonile Pioni arendajate grupist, kes aitas selle artikli ette valmistada). KĂ€esolevas artiklis annab Thanh ĂŒlevaate oma projekti arhitektuurist ning rÀÀgib, mida kasulikku ta Ă”ppis ja milliste vĂ€ljakutsetega ta silmitsi seisis oma töö ajal.

Sissejuhatus

Eelmisel aastal, kui Google kuulutas vĂ€lja Stadia, olin tĂ€iesti lĂ”hkevad. Idee on nii ainulaadne ja innovaatiline, et ma kĂŒsisin endalt pidevalt, kuidas selline asi on tehnoloogiliselt vĂ”imalik. Soov sĂŒvitsi minna sellesse valdkonda ajendas mind looma oma versiooni avatud lĂ€htekoodiga pilve mĂ€ngust. Tulemus oli lihtsalt fantastiline. Allpool jagan oma aastase projekti vĂ€ljatöötamise protsessi. projektiga.

TLDR: lĂŒhike slaidiversioon peamistest punktidest

Miks on pilve mÀngude tulevik

Usun, et pilvemÀngud saavad peagi olema uue pÔlvkonna mitte ainult mÀngude, vaid ka teiste infotehnoloogia valdkondade lahendustes. PilvemÀngud on kliendi/serveri mudeli tipp. See mudel maksimeerib tagapidamise haldamist ja minimeerib ettepoole suunatud töö, viies mÀngu logika kaugserverisse ja edastades pilti/hÀÀlt kliendile. Server teostab rasked arvutused, seega ei sÔltu klient enam seadme piirangutest.

Google Stadia vĂ”imaldab pĂ”himĂ”tteliselt mĂ€ngida AAA-mĂ€nge (st. kĂ”rgekvaliteetsed mĂ€ngud-plokkbusterid) YouTube'i sarnasel liidestel. Sama metodologia vĂ”ib kehtida ka teistele rasketele off-line rakendustele, nagu opsĂŒsteem vĂ”i 2D/3D graafiline disain jms, et suudaksime neid stabiilselt kĂ€itada madala spetsifikatsiooniga seadmetes erinevates platvormides.

Pilve mÀngimine avatud lÀhtekoodiga WebRTC-l: p2p, mitmikmÀng, null viivitus
Selle tehnoloogia tulevik: kas oskate ette kujutada, kui Microsoft Windows 10 töötaks Chrome'i brauseris?

PilvemÀngud on tehniliselt keerulised.

MĂ€ngimine on ĂŒks haruldasi valdkondi, kus on vajalik pidev kiire kasutaja reageerimine. Kui me mĂ”nikord kogeme 2 sekundi viivitust lehe klikil, on see vastuvĂ”etav. Otsevooged, mis reeglina jÀÀvad paar sekundit hiljaks, pakuvad siiski piisavat kasutusmugavust. Siiski, kui mĂ€ng viibib pidevalt 500 ms, on mĂ€ngimine lihtsalt vĂ”imatu. Meie eesmĂ€rk on saavutada ÀÀrmiselt madal viivitus, et sisendi ja meedia vahe oleks vĂ”imalikult vĂ€ike. SeetĂ”ttu traditsiooniline lĂ€henemine voogesitusele siin ei toimi.

Pilve mÀngimine avatud lÀhtekoodiga WebRTC-l: p2p, mitmikmÀng, null viivitus
PilvemĂ€ngude ĂŒldine malli

Avatud lÀhtekoodiga projekt CloudRetro

Otsustasin luua testimiseks pilvemÀngu nÀidise, et uurida, kas see on kÔik vÔimalik nii rangete vÔrgupiirangute tingimustes. Kontseptsiooni kontrollimiseks valisin Golangi, kuna see on mulle kÔige tuttavam keel ja sobib selle rakendamiseks paljuski, nagu hiljem selgus. Go on lihtne ja areneb vÀga kiiresti; Go kanalid sobivad suurepÀraselt mitme lÔime haldamiseks.

Projekt CloudRetro.io – avatud lĂ€htekoodiga pilvemĂ€nguteenuse platvorm retro-mĂ€ngude jaoks. Projekti eesmĂ€rk on tuua traditsioonilistesse retro-mĂ€ngudesse parim mĂ€ngukogemus ja lisada mitmikmĂ€ngu.
Projekti ĂŒksikasjadega saab tutvuda siin: https://github.com/giongto35/cloud-game.

CloudRetro funktsioonid

CloudRetro demonstreerib pilvemÀngude kogu potentsiaali retro-mÀngude abil. See vÔimaldab saada mitmeid unikaalseid mÀngukogemusi.

  • MĂ€ngu kaasaskantavus
    • Kohene mĂ€ngimise vĂ”imalus lehe avamisel; allalaadimist ja installimist ei ole vaja.
    • Töötab mobiilibrauseris, seega pole kĂ€itamiseks mingit tarkvara vajalik.

  • MĂ€nguseansse saab jagada mitmel seadmel ja salvestada pilve jĂ€rgmiseks sisenemiseks.
  • MĂ€ngu saab voogedastada, aga seda saavad korraga mĂ€ngida mitmed kasutajad:
    • Crowdplay sarnane TwitchPlayPokemonile, kuid rohkem platvormideĂŒlene ja reaalajas.
    • Offline mĂ€ngud online'is. Mitu kasutajat saavad mĂ€ngida ilma vĂ”rgu seadistamiseta. Samurai Shodownis saavad nĂŒĂŒd kaks mĂ€ngijat mĂ€ngida CloudRetro vĂ”rgus.

    Pilve mÀngimine avatud lÀhtekoodiga WebRTC-l: p2p, mitmikmÀng, null viivitus
    Mitu mÀngijat toetamata online-mÀngu demoversioon erinevates seadmetes.

    Infrastruktuur

    NÔuded ja tehnoloogiatehnoloogia.

    Allpool on toodud nÔuete loetelu, mille ma projekti alustamise eel seadnud olen.

    1. Üks mĂ€ngija
    See nĂ”ue vĂ”ib tunduda mitte liiga oluline ja ilmne, kuid see on ĂŒks mu peamisi jĂ€reldusi – see vĂ”imaldab pilvemĂ€ngudel vĂ”imalikult kaugel hoida traditsioonilistest voogedastusteenustest. Kui keskendume ĂŒhe mĂ€ngijaga mĂ€ngule, saame loobuda tsentraliseeritud serverist vĂ”i CDN-ist, kuna me ei pea voeedastust massidesse tegema. Selle asemel, et edastada vooge sööv serverisse vĂ”i edastada pakette tsentraliseeritud WebSocket serverisse, saadetakse teenusevood otse kasutajale lĂ€bi punkt-punkti WebRTC ĂŒhenduse.

    2. Madala latentsusega meediavool
    Lugedes Stadia kohta, kohtan ma sageli mĂ”nedes artiklites mainimist WebRTC-st. Hakkasin aru saama, et WebRTC on silmapaistev tehnoloogia, mis sobib suurepĂ€raselt pilvemĂ€ngude kasutamiseks. WebRTC on projekt, mis vĂ”imaldab veebibrauseritel ja mobiilirakendustel reaalajas ĂŒhendust luua lihtsa API kaudu. See tagab punkt-punkti ĂŒhenduse, mis on optimeeritud meedia jaoks ja sisaldab sisseehitatud standardkoodekeid, nagu VP8 ja H264.

    Ma olen eelistanud kasutajate mugava töö tagamist, mitte kÔrge graafika kvaliteedi sÀilitamist. Algoritmis on lubatud teatavad kadud. Google Stadias on serveris pildi suuruse vÀhendamise tÀiendav samm, ja kaadrid skaleeritakse kÔrgema kvaliteedini enne edastamist vÔrgu sÔlmedele.

    3. Geograafilise marsruutimisega jaotatud infrastruktuur
    Kuna algoritmide tihendamine ja kood on optimeeritud, on siiski kĂ”ige olulisem tegur latentsuse korral vĂ”rgustruktuur. Arhitektuur peaks sisaldama mehhanismi, mis ĂŒhendab lĂ€hima kasutajale serveriga, et vĂ€hendada RTT (ringkĂ€igu aega). Arhitektuuril peab olema ĂŒks koordinaator ja mitu voogesituse serverit, mis on jaotatud ĂŒle kogu maailma: LÀÀne-USA, Ida-USA, Euroopa, Singapur, Hiina. KĂ”ik voogesituse serverid peavad olema tĂ€ielikult isoleeritud. SĂŒsteem suudab reguleerida oma jaotust, kui server liitub vĂ”i lahkub vĂ”rgust. Seega, kui koormus on suur, vĂ”imaldab lisaserverite lisamine horisontaalset skaleerimist.

    4. Brauseri ĂŒhilduvus
    Pilve mĂ€ngud saavad parima ilme, kui need nĂ”uavad kasutajatelt minimaalset. See tĂ€hendab, et neid saab kĂ€ivitada brauseris. Brauserid aitavad muuta mĂ€ngimise kasutajasĂ”bralikumaks, vabastades nad tarkvara ja riistvara installimise koormast. Brauserid toetavad ka platvormidevahelist ĂŒhilduvust mobiilsete ja lauaarvutiversioonide vahel. Õnneks toetab WebRTC suurepĂ€raselt erinevaid brausereid.

    5. Selge eristus mÀngu liidese ja teenuse vahel
    Ma kĂ€sitlen pilvmĂ€nguteenust platvormina. Igal kasutajal peaks olema vĂ”imalus ĂŒhendada platvormile mida iganes. Praegu olen integreerinud LibRetro pilvmĂ€nguteenusega, sest LibRetro pakub kaunist mĂ€ngu emulaatori liidest retro mĂ€ngude jaoks, nagu SNES, GBA, PS.

    6. Mitme mĂ€ngija toad, crowd play ja mĂ€nguga sĂŒgava lingi (deep-link) sidumine
    CloudRetro toetab mitmeid uusi mĂ€ngimise vorme, nagu CrowdPlay ja Online MultiPlayer retro mĂ€ngude jaoks. Kui mitu kasutajat avavad erinevatel arvutitel sama sĂŒgava lingi, nĂ€evad nad sama mĂ€ngu ja saavad sellele isegi liituda.

    Lisaks sellele salvestatakse mÀngu seisud pilves. See vÔimaldab kasutajatel jÀtkata mÀngimist igal ajal igasugustel seadmetel.

    7. Horisontaalne skaleerimine
    Nagu iga praegune SAAS, peavad pilvemÀngud olema loodud horisontaalselt skaleeritavateks. Koordineerija-töötaja struktuur vÔimaldab lisada rohkem töötajaid suurema liikluse teenindamiseks.

    8. Pole seotust ĂŒhe pilvega
    CloudRetro infrastruktuur on paigutatud erinevatele pilveteenuse pakkujatele (Digital Ocean, Alibaba, kohandatud pakkuja) erinevates piirkondades. KĂ€ivitan konteinerites Docker infrastruktuuri ja seadistan vĂ”rguseaded bash-skripti abil, et vĂ€ltida sĂ”ltuvust ĂŒhest pilveteenuse pakkujast. Kombineerides selle NAT Traversal WebRTC-ga, saame paindlikkuse CloudRetro juurutamiseks igasugustel pilveplatvormidel ja isegi mis tahes kasutaja masinates.

    Arhitektuuri disain

    Töötaja: (vĂ”i ĂŒlekandeteenus, nagu eespool mainitud) haldab mĂ€nge, kĂ€ivitab kodeerimisvoo ja edastab kodeeritud meedia kasutajatele. Töötlusinstance jagatakse ĂŒle kogu maailma ning iga töötleja suudab samal ajal hallata mitmeid kasutaja seansse.

    Koordinaator: vastutab uue kasutaja sidumise eest sobiva töötlejaga voogedastamiseks. Koordinaator suhtleb töötlejatega WebSocketi kaudu.

    MÀngu seisundite hoidla: keskne kaughoidla kÔikide mÀngu seisundite jaoks. See hoidla tagab sellised olulised funktsioonid nagu kaugsalvestus/laadimine.

    Pilve mÀngimine avatud lÀhtekoodiga WebRTC-l: p2p, mitmikmÀng, null viivitus
    CloudRetro ĂŒlemine arhitektuur

    Kasutajaskenario

    Kui uus kasutaja avab CloudRetro 1. ja 2. sammul, nagu on nĂ€idatud alloleval pildil, kĂŒsitakse koordinaatorilt koos saadaval olevate töötajate nimekirjaga esimeses lehekĂŒljel. PĂ€rast seda, 3. sammul, arvutab klient viivitused kĂ”igi kandidaatide jaoks HTTP pingiga. See viivituste nimekiri saadetakse seejĂ€rel tagasi koordinaatorile, et ta saaks mÀÀrata kasutajale kĂ”ige sobivama töötaja. 4. sammul luuakse mĂ€ng. Kasutaja ja mÀÀratud töötaja vahel luuakse WebRTC kaudu voogedastuse ĂŒhendus.
    Pilve mÀngimine avatud lÀhtekoodiga WebRTC-l: p2p, mitmikmÀng, null viivitus
    Kasutajascenarion peale juurdepÀÀsu saamist

    Mis on töötajas sees

    MĂ€ngu- ja voogedastuskanalid hoitakse töötaja sees isoleeritult ning nad vahetavad teavet seal lĂ€bi liidese. Hetkel toimub see ĂŒhendus mĂ€lus andmete edastamise teel lĂ€bi Golang kanalite samas protsessis. JĂ€rgmine eesmĂ€rk on segregeerimine, st mĂ€ngu iseseisev kĂ€ivitamine teises protsessis.

    Pilve mÀngimine avatud lÀhtekoodiga WebRTC-l: p2p, mitmikmÀng, null viivitus
    Töötaja komponentide interaktsioon

    Peamised komponendid:

    • WebRTC: klientkomponent, mis vĂ”tab vastu kasutaja sisendi ja vĂ€ljastab serverist kodeeritud meedia.
    • MĂ€nguemulaator: mĂ€ngukomponent. TĂ€nu Libretro raamatukogule suudab sĂŒsteem kĂ€ivitada mĂ€ngu ĂŒhes protsessis ja sisemiselt peatada meedia ja sisendi voogu.
    • MĂ€ngu kohaletoimetatavad kaadrid salvestatakse ja saadetakse kodeerijale.
    • Pilt/heli kodeerija: kodeerimise torustik, mis vĂ”tab meedia kaadrid, kodeerib need taustal ning vĂ€ljastab kodeeritud pildid/helid.

    Rakendus

    CloudRetro toetub WebRTC-le kui pĂ”hitehnoloogiale, seetĂ”ttu enne, kui sĂŒveneen Gumidetailide elluviimisse Golangis, tahtsin rÀÀkida WebRTC-st. See on hĂ€mmastav tehnoloogia, mis on mind aidanud saavutada andmeedastuse viivituseks vaid killu sekundist.

    WebRTC

    WebRTC on mĂ”eldud kĂ”rgekvaliteediliste ĂŒheotsaliste ĂŒhenduste tagamiseks kohalikus mobiilirakenduses ja brauserites lihtsate API-de kaudu.

    NAT Traversal

    WebRTC on tuntud oma NAT Traversali funktsionaalsuse poolest. WebRTC on mĂ”eldud ĂŒks-ĂŒhele suhtlemiseks. Selle eesmĂ€rk on leida sobivaim otsene marsruut, vĂ€ltides NAT-lĂŒĂŒse ja tulemĂŒĂŒre töös, mida kutsutakse ICE. Selle protsessi kĂ€igus leiavad WebRTC API-d teie avaliku IP-aadressi STUN-serverite abil ja suunavad selle edasi tagasiserverisse (TURN), kui otseĂŒhendust ei Ă”nnestu luua.

    Kuid CloudRetro ei kasuta seda vĂ”imalust tĂ€ielikult. Selle peer-to-peer ĂŒhendused ei toimu kasutajate vahel, vaid kasutajate ja pilveserverite vahel. Mudeli serveripoolsel osal on vĂ€hem piiranguid otseĂŒhenduse osas kui tavalisel kasutajal. See vĂ”imaldab ette avada sissetulevad pordid vĂ”i kasutada otseselt avalikke IP-aadresse, kuna server ei asu NAT-i taga.

    Kun ma tahtsin varem muuta projekti mĂ€ngude levitamise platvormiks Cloud Gaming jaoks. Idee oli vĂ”imaldada mĂ€ngu loojatel pakkuda mĂ€nge ja voogesituse ressursse. Kasutajad suheldaksid otse teenusepakkujatega. Sellises detsentraliseeritud lĂ€henemises on CloudRetro lihtsalt keskkond, mis ĂŒhendab kolmandate osapoolte voogesitusressursse kasutajatega, muutes selle skaleeritavaks, kuna hosting ei ole enam selle peamine eesmĂ€rk. WebRTC NAT Traversal mĂ€ngib siin vĂ€ga olulist rolli, hĂ”lbustades peer-to-peer ĂŒhenduse loomist kolmandate osapoolte voogesitusressursside vahel, mis lihtsustab looja ĂŒhendamist vĂ”rguga.

    Videokompressioon

    Videokompressioon on hÀdavajalik osa voogesituse tööprotsessist, mis panustab olulisel mÀÀral voogesituse sujuvusele. Kuigi ei ole hÀdavajalik teada kÔiki VP8/H264 videokoodimise detaile, aitab mÔistmine kontseptsioonist aru saada voogedastuse kiirusparameetritest, tuvastada ootamatut kÀitumist ja kohandada viivitust.

    Video voogesituse tihendamine on keeruline ĂŒlesanne, kuna algoritm peab tagama, et kokkuvĂ”ttes koodimise aeg + edastusaeg + dekodeerimise aeg oleks vĂ”imalikult vĂ€ike. Lisaks peab kodeerimisprotsess olema jĂ€rjepidev ja katkematu. Teatud kompromissid kodeerimise osas ei kehti – nĂ€iteks ei saa me eelistada pikemat kodeerimisaega vĂ€iksema failisuuruse ja dekodeerimise aja arvel, ega kasutada jĂ€rjepidevat tihendamist.

    Video tihendamise idee seisneb ebavajalike informatsiooni bittide eemaldamises, sĂ€ilitades samal ajal kasutajatele vastuvĂ”etava tĂ€psuse taseme. Lisaks ĂŒksikute staatiliste piltide kodeerimisele teeb algoritm jĂ€reldusi praegusest kaadrist varasema ja jĂ€rgmise pĂ”hjal, seega saadetakse ainult nende vaheline erinevus. Nagu nĂ€ha Pacmani nĂ€ites, edastatakse ainult diferentseeritud punktid.

    Pilve mÀngimine avatud lÀhtekoodiga WebRTC-l: p2p, mitmikmÀng, null viivitus
    Kuid videokadrite vÔrdlemine Pacmani nÀitel

    Audio tihendamine

    Sarnasel viisil loob heli kompressioon algoritm andmeid, mida inimene ei suuda tajuda. Opus on hetkel parim tulemuslikkusega helikodek. See on vĂ€lja töötatud helilaine edastamiseks jĂ€rjestiku datagrammi protokollis, nagu RTP (Real Time Transport Protocol – reaalajas edastamise protokoll). Selle latentsus on madalam kui mp3 ja aac ning kvaliteet on parem. Latentsus on tavaliselt umbes 5–66,5 ms.

    Pion, WebRTC Go'is

    Pion on avatud lÀhtekoodiga projekt, mis toob WebRTC Go-sse. Erinevalt tavalistest C++ WebRTC teekide vÀÀnamisest on Pion natiivne Golangi teostus WebRTC jaoks, millel on parem tulemuslikkus, Go'ga integreerimine ning protokollide WebRTC versioonikontroll.

    Raamatukogu toetab ka andmevoogu suure hulga suurepÀraste sisseehitatud moodulitega, mille viivitus on vÀhem kui sekund. Sellel on oma STUN, DTLS, SCTP jne rakendus ning mÔned katsetused QUICi ja WebAssemblyga. See avatud lÀhtekoodiga raamatukogu on tÔeliselt hea Ôppeallikas suurepÀrase dokumentatsiooni, vÔrguprotokollide rakendamise ja Àgedate nÀidistega.

    Pioni kogukond, mida juhib vĂ€ga kirglik looja, on ĂŒsna elav, seal toimub palju kvaliteetseid arutelusid WebRTCi ĂŒle. Kui teid huvitab see tehnoloogia, liituge http://pion.ly/slack – te Ă”ppite palju uut.

    CloudRetro kirjutamine Golangis

    Pilve mÀngimine avatud lÀhtekoodiga WebRTC-l: p2p, mitmikmÀng, null viivitus
    Töötlija rakendamine Go-s

    Go kanalid tegevuses

    Go kanalite kauni disaini tĂ”ttu on voogedastuse ja paralleelsuse probleemid oluliselt lihtsamad. Nagu diagrammil, töötavad erinevates GoRoutines mitmed komponendid paralleelselt. Iga komponent haldab oma olekut ja suhtleb kanalite kaudu. Golangi valikuline avaldus sunnib töötlema ĂŒhte aatomitööd iga mĂ€ngu hetke jooksul (game tick). See tĂ€hendab, et sellise disaini puhul ei ole lukustamine vajalik. NĂ€iteks, kui kasutaja salvestab, on vajalik tĂ€ielik mĂ€ngu oleku snapshot. See olek peab jÀÀma pidevaks, tehes sisendi, kuni salvestamine on lĂ”petatud. Iga game tick'i ajal saab tagasisĂŒsteem töödelda vaid salvestamise vĂ”i sisendi operatsiooni, mis muudab protsessi voogude turvaliseks.

    func (e *gameEmulator) gameUpdate() {
    for {
    	select {
    		case <-e.saveOperation:
    			e.saveGameState()
    		case key := <-e.input:
    			e.updateGameState(key)
    		case <-e.done:
    			e.close()
    			return
    	}
        }
    }

    Fan-in / Fan-out

    See Golang'i mall sobib suurepĂ€raselt minu CrowdPlay ja Multiple Player kasutusstsenaariumiga. JĂ€rgides seda malli, integreeritakse kĂ”ik kasutaja sisendid ĂŒhes toas keskse sisendi kanalisse. MĂ€ngu multimeedia edastatakse seejĂ€rel kĂ”igile kasutajatele, kes viibivad ĂŒhes toas. Nii saavutame mĂ€ngu oleku jagamise erinevate kasutajate mĂ€ngusessioonide vahel.

    Pilve mÀngimine avatud lÀhtekoodiga WebRTC-l: p2p, mitmikmÀng, null viivitus
    SĂŒnkroniseerimine erinevate seansside vahel

    Golang'i puudused

    Golang ei ole tÀiuslik. Kanal on aeglane. VÔrreldes lukustatud kanaliga on Go lihtsalt lihtsam viis paralleelsete ja voogedastuste töötlemiseks, kuid kanal ei paku parimat jÔudlust. Kanali all on keeruline lukustamise loogika. SeetÔttu olen mÔned muudatused teinud rakendusse, rakendades uuesti lukustusi ja aatomvÀÀrtusi kanali asendamiseks jÔudluse optimeerimiseks.

    Lisaks on Golang'i jÀÀtme kogumine halduses, mis pÔhjustab mÔnikord kahtlaseid pikaid pause. See hÀirib tÔsiselt reaalajas voogedastuse rakenduse toimimist.

    CGO

    Projektis kasutatakse olemasolevat VP8/H264 avatud lĂ€htekoodiga Golangi teeki meedia pakkimiseks ja Libretro mĂ€ngu emulaatoriteks. KĂ”ik need teegid on lihtsalt C teegi ĂŒmbermĂ”testamised Go-s, kasutades CGO. MĂ”ned puudused on loetletud selles Dave Cheney postituses. Probleemid, millega ma silmitsi seisin:

    • CGO-s krahhi kinni pĂŒĂŒda ei ole vĂ”imalik, isegi Golangi RecoveryCrash'i abil;
    • vĂ”imetus mÀÀrata, kus on jĂ”udlusprobleem, kuna me ei suuda CGO-s detailsetelt probleeme avastada.

    KokkuvÔte

    Olin oma eesmĂ€rgiga saavutanud – mĂ”istsin pilvemĂ€nguteenuseid ja lĂ”in platvormi, mis vĂ”imaldab mul mĂ€ngida nostalgilisi retro mĂ€nge oma sĂ”pradega veebis. Selle projekti loomine ei oleks olnud vĂ”imalik ilma Pioni teegi ja Pioni kogukonna toeta. Olen ÀÀrmiselt tĂ€nulik selle intensiivse arengu eest. WebRTC ja Pioni pakutud lihtsad API-d vĂ”imaldasid sujuvat integreerimist. Minu esimene tĂ”end kontseptsioonist kĂ€idi vĂ€lja samal nĂ€dalal, isegi kui ma ei teadnud ette ĂŒhte punkti suhete kohta (P2P).

    Kuigi P2P-voogedastus integreerimine on lihtne, on see tegelikult arvutiteaduses vÀga keeruline valdkond. See peab tegelema mitme aasta jooksul vÀlja arendatud keerukate vÔrguarhitektuuridega, nagu IP ja NAT, et luua omavaheline sessioon. Projekti kÀigus olen kogunud palju vÀÀrtuslikke teadmisi vÔrgustatud ja jÔudluse optimeerimise kohta, seega soovitan kÔigil proovida luua P2P-tooteid WebRTC abil.

    CloudRetro katab kÔik kasutusskeemid, mida ootasin, retro-mÀnguri vaatenurgast. Siiski arvan, et projektis on palju kohti, kus saaksin parendada, nÀiteks vÔrgu usaldusvÀÀrsuse ja jÔudluse suurendamine, mÀngude graafika kvaliteedi tÔstmine vÔi kasutajate vahel mÀngude jagamise vÔimalus. Töödan selle nimel kÔvasti. Palun jÀlgige projektiga ja toetage seda, kui see teile meeldib.

Allikas: habr.com

Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster