ProHoster > blog > Utawala > Chanzo huria cha uchezaji wa wingu kwenye WebRTC: p2p, wachezaji wengi, muda wa sifuri
Chanzo huria cha uchezaji wa wingu kwenye WebRTC: p2p, wachezaji wengi, muda wa sifuri
Programu kama huduma, miundombinu kama huduma, jukwaa kama huduma, jukwaa la mawasiliano kama huduma, mikutano ya video kama huduma, vipi kuhusu kucheza kwenye mtandao kama huduma? Tayari kumekuwa na majaribio kadhaa ya kuunda uchezaji kwenye mtandao (Cloud Gaming), kama vile Stadia, iliyozinduliwa hivi majuzi na Google. Stadia sio mpya kwa WebRTC, lakini je, wengine wanaweza kutumia WebRTC kwa njia sawa?
Thanh Nguyen aliamua kujaribu fursa hii kwenye mradi wake wa chanzo huria CloudRetro. CloudRetro inategemea Pion, maarufu Maktaba ya WebRTC kulingana na Go (asante Imeonyeshwa kutoka kwa timu ya maendeleo ya Pion kwa msaada wao katika kuandaa nakala hii). Katika makala hii, Thanh anatoa muhtasari wa usanifu wa mradi wake, na pia anazungumzia mambo gani muhimu aliyojifunza na changamoto alizokutana nazo wakati wa kazi yake.
Entry
Mwaka jana, Google ilipotangaza Stadia, ilinifurahisha sana. Wazo hilo ni la kipekee na la ubunifu kiasi kwamba nilijiuliza kila mara jinsi hii inavyowezekana na teknolojia iliyopo. Tamaa ya kuelewa mada hii vyema ilinisukuma kuunda toleo langu la mchezo wa mtandao huria. Matokeo yake yalikuwa ya ajabu tu. Hapa chini ningependa kushiriki mchakato wa kufanya kazi kwa mwaka wangu mradi.
TLDR: toleo fupi la slaidi na vivutio
Kwa nini uchezaji wa wingu ni siku zijazo
Ninaamini kuwa Cloud Gaming hivi karibuni itakuwa kizazi kijacho cha sio michezo ya kubahatisha tu, bali pia maeneo mengine ya sayansi ya kompyuta. Uchezaji wa wingu ndio kilele cha modeli ya mteja/seva. Muundo huu huongeza usimamizi wa mazingira nyuma na kupunguza kazi ya mandhari ya mbele kwa kupangisha mantiki ya mchezo kwenye seva ya mbali na kutiririsha picha/sauti kwa mteja. Seva hufanya uchakataji mzito ili mteja asiwe chini ya huruma ya mapungufu ya maunzi.
Google Stadia inakuwezesha kucheza Michezo ya AAA (yaani michezo ya hali ya juu) kwenye kiolesura kama YouTube. Mbinu hiyo hiyo inaweza kutumika kwa programu zingine nzito za nje ya mtandao kama vile mfumo wa uendeshaji au muundo wa picha wa 2D/3D, n.k. ili tuweze kuziendesha mara kwa mara kwenye vifaa vya hali ya chini kwenye mifumo mingi.
Mustakabali wa teknolojia hii: Hebu fikiria ikiwa Microsoft Windows 10 iliendeshwa kwenye kivinjari cha Chrome?
Uchezaji wa wingu ni changamoto kiufundi
Michezo ya kubahatisha ni mojawapo ya maeneo hayo adimu ambapo majibu ya mara kwa mara na ya haraka ya mtumiaji yanahitajika. Ikiwa mara kwa mara tunakumbana na ucheleweshaji wa sekunde 2 wakati wa kubofya ukurasa, hii inakubalika. Mitiririko ya video ya moja kwa moja huwa inachelewa kwa sekunde chache, lakini bado inatoa utumiaji unaofaa. Walakini, ikiwa mchezo mara nyingi huchelewa kwa 500ms, hauwezi kuchezwa. Lengo letu ni kufikia latency ya chini sana ili pengo kati ya pembejeo na media liwe ndogo iwezekanavyo. Kwa hivyo, mbinu ya kitamaduni ya utiririshaji wa video haitumiki hapa.
General Cloud Game Kigezo
Mradi wa chanzo wazi CloudRetro
Niliamua kuunda sampuli ya jaribio la mchezo wa wingu ili kuona ikiwa yote haya yanawezekana kwa vizuizi vikali vya mtandao. Nilichagua Golang kwa uthibitisho wa dhana kwa sababu ndiyo lugha niliyoifahamu zaidi na ilifaa sana kwa utekelezaji huu kwa sababu nyingine nyingi, kama nilivyogundua baadaye. Go ni rahisi na inakua haraka sana; Vituo katika Go ni vyema kwa kudhibiti usomaji wa maandishi mengi.
Mradi CloudRetro.io ni chanzo wazi cha huduma ya uchezaji wa wingu kwa uchezaji wa retro. Lengo la mradi ni kuleta uzoefu mzuri zaidi wa michezo ya kubahatisha kwa michezo ya jadi ya retro na kuongeza wachezaji wengi.
Unaweza kujifunza zaidi kuhusu mradi hapa: https://github.com/giongto35/cloud-game.
Utendaji wa CloudRetro
CloudRetro hutumia michezo ya retro ili kuonyesha uwezo wa kucheza kwenye mtandao. Ambayo hukuruhusu kupata matumizi mengi ya kipekee ya uchezaji.
Uwezo wa kubeba mchezo
Uchezaji wa papo hapo wakati wa kufungua ukurasa; hakuna upakuaji au usakinishaji unaohitajika
Inafanya kazi katika kivinjari cha rununu, kwa hivyo hakuna programu inahitajika kuiendesha
Vipindi vya mchezo vinaweza kushirikiwa kwenye vifaa vingi na kuhifadhiwa katika wingu wakati ujao utakapoingia
Mchezo unaweza kutiririshwa, au unaweza kuchezwa na watumiaji kadhaa mara moja:
Uchezaji wa watu wengi kama TwitchPlayPokemon, jukwaa zaidi tu na kwa wakati halisi
Michezo ya nje ya mtandao mtandaoni. Watumiaji wengi wanaweza kucheza bila kusanidi mtandao. Samurai Shodown sasa inaweza kuchezwa na wachezaji 2 kwenye mtandao wa CloudRetro
Toleo la onyesho la mchezo wa wachezaji wengi mtandaoni kwenye vifaa tofauti
Miundombinu
Mahitaji na stack teknolojia
Ifuatayo ni orodha ya mahitaji ambayo niliweka kabla ya kuanza mradi.
1. Mchezaji mmoja
Sharti hili linaweza lisionekane kuwa muhimu sana au dhahiri hapa, lakini ni moja wapo ya vidokezo vyangu muhimu, huruhusu michezo ya kubahatisha ya wingu kukaa mbali na huduma za utiririshaji wa kitamaduni iwezekanavyo. Ikiwa tutazingatia mchezo wa mchezaji mmoja, tunaweza kuondoa seva ya kati au CDN kwa sababu sio lazima kutiririka kwa watu wengi. Badala ya kupakia mitiririko kwenye seva ya kuzama au kupitisha pakiti kwa seva ya WebSocket ya kati, mitiririko ya huduma hutolewa moja kwa moja kwa mtumiaji kupitia muunganisho wa rika-kwa-rika la WebRTC.
2. Mtiririko wa media ya utulivu wa chini
Nikisoma kuhusu Stadia, mara nyingi mimi huona WebRTC iliyotajwa katika nakala zingine. Niligundua kuwa WebRTC ni teknolojia bora na inafaa kutumika katika uchezaji wa mtandaoni. WebRTC ni mradi ambao hutoa vivinjari vya wavuti na programu za simu na mawasiliano ya wakati halisi kupitia API rahisi. Inatoa muunganisho wa programu kati ya programu zingine, imeboreshwa kwa midia, na ina kodeki za kawaida zilizojengewa ndani kama vile VP8 na H264.
Nilitanguliza kipaumbele kuhakikisha matumizi bora ya mtumiaji kuliko kudumisha picha za ubora wa juu. Baadhi ya hasara zinakubalika katika algorithm. Google Stadia ina hatua ya ziada ya kupunguza ukubwa wa picha kwenye seva, na fremu hupandishwa kwa ubora wa juu kabla ya kutumwa kwa programu zingine.
3. Miundombinu iliyosambazwa yenye uelekezaji wa kijiografia
Haijalishi jinsi kanuni za mbano na msimbo zimeboreshwa, mtandao bado ndio kipengele cha kuamua kinachochangia zaidi muda wa kusubiri. Usanifu lazima uwe na utaratibu wa kuoanisha seva iliyo karibu zaidi na mtumiaji ili kupunguza muda wa kurudi na kurudi (RTT). Usanifu lazima uwe na mratibu 1 na seva kadhaa za utiririshaji zinazosambazwa kote ulimwenguni: US West, US East, Europe, Singapore, China. Seva zote za utiririshaji lazima zitenganishwe kabisa. Mfumo unaweza kurekebisha usambazaji wake wakati seva inajiunga au kuondoka kwenye mtandao. Kwa hivyo, kwa trafiki kubwa, kuongeza seva za ziada huruhusu kuongeza usawa.
4. Utangamano wa kivinjari
Uchezaji wa wingu ni bora zaidi wakati unahitaji angalau kutoka kwa watumiaji. Hii ina maana kwamba inawezekana kukimbia katika kivinjari. Vivinjari husaidia kufanya hali ya uchezaji iwe rahisi kwa watumiaji iwezekanavyo, kuwaokoa kutokana na kusakinisha programu na maunzi. Vivinjari pia husaidia kutoa utendakazi wa majukwaa mtambuka kati ya matoleo ya simu na eneo-kazi. Kwa bahati nzuri, WebRTC inaauniwa vyema katika vivinjari mbalimbali.
5. Kutenganisha wazi kwa kiolesura cha mchezo na huduma
Ninaona huduma ya michezo ya kubahatisha ya wingu kama jukwaa. Kila mtu anapaswa kuwa na uwezo wa kuunganisha chochote kwenye jukwaa. Sasa nimeunganisha LibRetro na huduma ya uchezaji wa wingu kwa sababu LibRetro inatoa kiolesura kizuri cha kiigaji cha mchezo kwa michezo ya retro kama vile SNES, GBA, PS.
6. Vyumba vya wachezaji wengi, kucheza kwa umati na kuunganisha nje (kiungo cha kina) na mchezo
CloudRetro inasaidia michezo mingi mipya kama vile CrowdPlay na MultiPlayer Online kwa michezo ya retro. Ikiwa watumiaji kadhaa watafungua kiunga sawa cha kina kwenye kompyuta tofauti, wataona mchezo sawa unaoendesha na hata wataweza kujiunga nao.
Kwa kuongezea, majimbo ya mchezo huhifadhiwa kwenye uhifadhi wa wingu. Hii inaruhusu watumiaji kuendelea kucheza wakati wowote kwenye kifaa kingine chochote.
7. Kuongeza usawa
Kama ilivyo kwa SAAS yoyote siku hizi, michezo ya kubahatisha kwenye mtandao lazima iundwe ili iweze kuongezeka kwa usawa. Muundo wa mratibu na mfanyakazi hukuruhusu kuongeza wafanyikazi zaidi ili kuhudumia trafiki zaidi.
8. Hakuna uhusiano na wingu moja
Miundombinu ya CloudRetro inapangishwa na watoa huduma tofauti wa wingu (Bahari ya Dijiti, Alibaba, mtoaji maalum) kwa mikoa tofauti. Ninawezesha kukimbia kwenye chombo cha Docker kwa miundombinu na kusanidi mipangilio ya mtandao kwa kutumia hati ya bash ili kuzuia kufungiwa ndani ya mtoaji mmoja wa wingu. Kwa kuchanganya hili na NAT Traversal katika WebRTC, tunaweza kuwa na wepesi wa kusambaza CloudRetro kwenye jukwaa lolote la wingu na hata kwenye mashine za mtumiaji yeyote.
Ubunifu wa usanifu
Mfanyakazi: (au seva ya utiririshaji iliyotajwa hapo juu) huzidisha michezo, huendesha bomba la usimbaji, na kutiririsha midia iliyosimbwa kwa watumiaji. Matukio ya wafanyikazi yanasambazwa kote ulimwenguni, na kila mfanyakazi anaweza kushughulikia vipindi vingi vya watumiaji kwa wakati mmoja.
Mratibu: ina jukumu la kuoanisha mtumiaji mpya na mfanyakazi anayefaa zaidi kwa utiririshaji. Mratibu hutangamana na wafanyakazi kupitia WebSocket.
Hifadhi ya hali ya mchezo: uhifadhi wa kati wa mbali kwa majimbo yote ya mchezo. Hifadhi hii hutoa utendakazi muhimu kama vile kuokoa/pakia kwa mbali.
Usanifu wa hali ya juu wa CloudRetro
Hati Maalum
Mtumiaji mpya anapofungua CloudRetro katika hatua ya 1 na 2 iliyoonyeshwa kwenye kielelezo kilicho hapa chini, mratibu pamoja na orodha ya wafanyakazi wanaopatikana huombwa kwenye ukurasa wa kwanza. Baada ya hayo, katika hatua ya 3 mteja huhesabu ucheleweshaji wa wagombeaji wote kwa kutumia ombi la HTTP ping. Orodha hii ya ucheleweshaji hurejeshwa kwa mratibu ili aweze kuamua mfanyakazi anayefaa zaidi kumhudumia mtumiaji. Hatua ya 4 hapa chini inaunda mchezo. Muunganisho wa utiririshaji wa WebRTC umeanzishwa kati ya mtumiaji na mfanyakazi aliyepewa.
Hati ya mtumiaji baada ya kupata ufikiaji
Nini ndani ya mfanyakazi
Mabomba ya mchezo na utiririshaji huhifadhiwa ndani ya mfanyakazi kwa kutengwa na kubadilishana habari hapo kupitia kiolesura. Hivi sasa, mawasiliano haya yanafanywa kwa kuhamisha data kwenye kumbukumbu kupitia Njia za Golang katika mchakato huo. Lengo linalofuata ni kutengwa, i.e. uzinduzi huru wa mchezo katika mchakato mwingine.
Mwingiliano wa vipengele vya mfanyakazi
Vipengee kuu:
WebRTC: sehemu ya mteja inayokubali ingizo la mtumiaji na kutoa midia iliyosimbwa kutoka kwa seva.
Kiigizaji cha mchezo: sehemu ya mchezo. Shukrani kwa maktaba ya Libretro, mfumo unaweza kuendesha mchezo ndani ya mchakato sawa na kuingilia ndani media na mtiririko wa kuingiza.
Fremu za ndani ya mchezo hunaswa na kutumwa kwa programu ya kusimba.
Kisimbaji cha Picha/Sauti: bomba la usimbaji ambalo huchukua fremu za midia, kuzisimba chinichini, na kutoa picha/sauti zilizosimbwa.
Utekelezaji
CloudRetro inategemea WebRTC kama teknolojia ya uti wa mgongo, kwa hivyo kabla ya kupiga mbizi katika maelezo ya utekelezaji wa Golang, niliamua kuzungumza juu ya WebRTC yenyewe. Hii ni teknolojia ya ajabu ambayo imenisaidia sana katika kufikia muda wa kusubiri wa sekunde ndogo ya kutiririsha data.
WebRTC
WebRTC imeundwa ili kutoa miunganisho ya hali ya juu ya programu kati ya programu zingine na vivinjari kwa kutumia API rahisi.
Usafiri wa NAT
WebRTC inajulikana kwa utendaji wake wa NAT Traversal. WebRTC imeundwa kwa ajili ya mawasiliano kati ya rika hadi rika. Lengo lake ni kupata njia ya moja kwa moja inayofaa zaidi, kuepuka lango la NAT na ngome za mawasiliano kati ya rika kwa njia ya mchakato unaoitwa. ICE. Kama sehemu ya mchakato huu, API za WebRTC hupata anwani yako ya IP ya umma kwa kutumia seva za STUN na kuisambaza kwa seva ya relay (TAFADHALI) wakati muunganisho wa moja kwa moja hauwezi kuanzishwa.
Hata hivyo, CloudRetro haitumii kipengele hiki kikamilifu. Miunganisho yake ya rika hadi rika haipo kati ya watumiaji, lakini kati ya watumiaji na seva za wingu. Upande wa seva wa modeli una vizuizi vichache vya mawasiliano ya moja kwa moja kuliko kifaa cha kawaida cha mtumiaji. Hii hukuruhusu kufungua mapema milango inayoingia au kutumia anwani za IP za umma moja kwa moja, kwa kuwa seva haiko nyuma ya NAT.
Hapo awali, nilitaka kubadilisha mradi kuwa jukwaa la usambazaji wa mchezo kwa Cloud Gaming. Wazo lilikuwa kuruhusu waundaji wa michezo kutoa rasilimali za michezo na utiririshaji. Na watumiaji wangeingiliana na watoa huduma moja kwa moja. Kwa njia hii ya kugatuliwa, CloudRetro ni mfumo tu wa kuunganisha rasilimali za utiririshaji za wahusika wengine kwa watumiaji, na kuifanya iwe hatari zaidi ikiwa haijapangishwa tena. Jukumu la WebRTC NAT Traversal hapa ni muhimu sana kuwezesha uanzishaji wa muunganisho wa programu kati ya programu zingine kwenye nyenzo za utiririshaji za wahusika wengine, ili iwe rahisi kwa mtayarishi kuunganisha kwenye mtandao.
Ukandamizaji wa video
Ukandamizaji wa video ni sehemu ya lazima ya bomba na inachangia sana mtiririko mzuri. Ingawa si lazima kujua kila undani wa usimbaji wa video wa VP8/H264, kuelewa dhana kunaweza kukusaidia kuelewa chaguo za kasi ya utiririshaji wa video, kutatua tabia isiyotarajiwa na kurekebisha muda wa kusubiri.
Kubana video kwa huduma ya utiririshaji ni changamoto kwa sababu kanuni lazima ihakikishe kuwa jumla ya muda wa usimbaji + muda wa upokezaji wa mtandao + wakati wa kusimbua ni mdogo iwezekanavyo. Kwa kuongeza, mchakato wa coding lazima uwe thabiti na uendelee. Baadhi ya mabadiliko ya usimbaji hayatumikiβkwa mfano, hatuwezi kupendelea muda mrefu wa usimbaji kuliko ukubwa wa faili ndogo na nyakati za kusimbua, au kutumia mbano isiyolingana.
Wazo la ukandamizaji wa video ni kuondoa vipande vya habari visivyohitajika huku ukidumisha kiwango kinachokubalika cha usahihi kwa watumiaji. Kando na kusimba fremu za picha tuli za kibinafsi, algoriti huingilia fremu ya sasa kutoka kwa zilizotangulia na zinazofuata, kwa hivyo tofauti zao pekee ndizo zinazotumwa. Kama inavyoonekana kutoka kwa mfano na Pacman, nukta tofauti pekee hupitishwa.
Ulinganisho wa fremu za video kwa kutumia Pacman kama mfano
Ukandamizaji wa sauti
Vile vile, kanuni ya mfinyazo wa sauti huacha data ambayo haiwezi kutambuliwa na wanadamu. Opus kwa sasa ndiyo kodeki ya sauti inayofanya vizuri zaidi. Imeundwa kusambaza wimbi la sauti juu ya itifaki ya datagramu iliyoagizwa kama vile RTP (Itifaki ya Usafiri ya Wakati Halisi). Muda wake wa kusubiri ni wa chini kuliko mp3 na aac, na ubora ni wa juu zaidi. Muda wa kusubiri kawaida ni karibu 5 ~ 66,5ms.
Pion, WebRTC huko Golang
Pauni ni mradi wa chanzo huria ambao huleta WebRTC hadi Golang. Badala ya ufungaji wa kawaida wa maktaba asilia za C++ WebRTC, Pion ni utekelezaji asilia wa Golang wa WebRTC wenye utendaji bora, ujumuishaji wa Go, na udhibiti wa toleo kwenye itifaki za WebRTC.
Maktaba pia huwezesha utiririshaji na viboreshaji vingi vilivyojengwa na utulivu wa sekunde ndogo. Ina utekelezaji wake wa STUN, DTLS, SCTP, nk. na baadhi ya majaribio na QUIC na WebAssembly. Maktaba hii ya programu huria yenyewe ni nyenzo nzuri sana ya kujifunzia iliyo na hati bora, utekelezaji wa itifaki ya mtandao, na mifano mizuri.
Jumuiya ya Pion, inayoongozwa na mtayarishi anayependa sana, inachangamka sana, na mijadala mingi ya ubora inaendelea kuhusu WebRTC. Ikiwa una nia ya teknolojia hii, jiunge http://pion.ly/slack - utajifunza mambo mengi mapya.
Kuandika CloudRetro katika Golang
Utekelezaji wa mfanyakazi katika Go
Nenda kwenye Vituo kwa Vitendo
Shukrani kwa muundo mzuri wa kituo cha Go, matatizo ya utiririshaji wa matukio na upatanifu yamerahisishwa sana. Kama ilivyo kwenye mchoro, GoRoutines tofauti zina vijenzi vingi vinavyoendana sambamba. Kila sehemu inasimamia hali yake na huwasiliana kupitia njia. Madai ya kuchagua ya Golang hulazimisha tukio moja la atomiki kuchakatwa kila wakati kwenye mchezo (tiki ya mchezo). Hii inamaanisha kuwa hakuna kufuli inahitajika kwa muundo huu. Kwa mfano, mtumiaji anapohifadhi, picha kamili ya hali ya mchezo inahitajika. Hali hii inapaswa kubaki kuendelea, kuingia hadi uhifadhi ukamilike. Wakati wa kila tiki ya mchezo, sehemu ya nyuma inaweza kushughulikia tu operesheni ya kuhifadhi au ingizo, na kufanya uzi wa mchakato kuwa salama.
func (e *gameEmulator) gameUpdate() {
for {
select {
case <-e.saveOperation:
e.saveGameState()
case key := <-e.input:
e.updateGameState(key)
case <-e.done:
e.close()
return
}
}
}
Shabiki-ndani/Shabiki-nje
Kiolezo hiki cha Golang kinatoshea kesi yangu ya utumiaji ya CrowdPlay na Multiple Player kikamilifu. Kufuatia muundo huu, pembejeo zote za mtumiaji katika chumba kimoja zimejengwa kwenye njia kuu ya kuingilia. Midia ya mchezo hutumwa kwa watumiaji wote katika chumba kimoja. Kwa njia hii, tunafanikisha mgawanyo wa hali ya mchezo kati ya vipindi kadhaa vya mchezo vya watumiaji tofauti.
Usawazishaji kati ya vipindi tofauti
Hasara za Golang
Golang sio kamili. Kituo ni polepole. Ikilinganishwa na kuzuia, kituo cha Go ni njia rahisi ya kushughulikia matukio ya wakati mmoja na ya mazungumzo, lakini kituo hakitoi utendakazi bora. Kuna mantiki changamano ya kuzuia chini ya kituo. Kwa hivyo nilifanya marekebisho fulani kwa utekelezaji, nikitumia kufuli na thamani za atomiki upya wakati wa kubadilisha chaneli ili kuboresha utendaji.
Kwa kuongezea, mtoaji wa taka huko Golang haudhibitiwi, ambayo wakati mwingine husababisha pause ndefu za kutiliwa shaka. Hii inatatiza sana programu ya utiririshaji ya wakati halisi.
COG
Mradi unatumia maktaba ya tovuti huria iliyopo ya Golang VP8/H264 kwa ukandamizaji wa midia na Libretro kwa viigaji vya mchezo. Maktaba hizi zote ni vifungashio vya maktaba ya C katika Go kutumia COG. Baadhi ya hasara zimeorodheshwa katika chapisho hili la Dave Cheney. Shida nilizokutana nazo:
kutokuwa na uwezo wa kupata ajali katika CGO, hata kwa Golang RecoveryCrash;
kushindwa kutambua vikwazo vya utendaji wakati hatuwezi kugundua matatizo ya kina katika CGO.
Hitimisho
Nilitimiza lengo langu la kuelewa huduma za uchezaji wa mtandaoni na kuunda jukwaa ambalo hunisaidia kucheza michezo ya nostalgic ya retro na marafiki zangu mtandaoni. Mradi huu haungewezekana bila maktaba ya Pion na usaidizi wa jumuiya ya Pion. Ninashukuru sana kwa maendeleo yake makubwa. API rahisi zinazotolewa na WebRTC na Pion zilihakikisha ujumuishaji usio na mshono. Uthibitisho wangu wa kwanza wa dhana ulitolewa wiki hiyo hiyo, ingawa sikuwa na ujuzi wa awali wa mawasiliano ya rika-kwa-rika (P2P).
Licha ya urahisi wa kuunganishwa, utiririshaji wa P2P kwa kweli ni eneo ngumu sana katika sayansi ya kompyuta. Anapaswa kushughulika na ugumu wa usanifu wa muda mrefu wa mtandao kama vile IP na NAT ili kuunda kipindi cha rika-kwa-rika. Nilipokuwa nikifanya kazi kwenye mradi huu, nilipata maarifa mengi muhimu kuhusu uboreshaji wa mitandao na utendakazi, kwa hivyo ninahimiza kila mtu kujaribu kuunda bidhaa za P2P kwa kutumia WebRTC.
CloudRetro inashughulikia kesi zote za utumiaji nilizotarajia kutoka kwa mtazamo wangu kama mchezaji wa retro. Hata hivyo, nadhani kuna maeneo mengi katika mradi ambayo ninaweza kuboresha, kama vile kufanya mtandao kutegemewa na utendakazi zaidi, kutoa picha za ubora wa juu za mchezo, au uwezo wa kushiriki michezo kati ya watumiaji. Ninafanya kazi kwa bidii katika hili. Tafadhali fuata mradi na uunge mkono ikiwa unaipenda.