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.

Chanzo huria cha uchezaji wa wingu kwenye WebRTC: p2p, wachezaji wengi, muda wa sifuri
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.

Chanzo huria cha uchezaji wa wingu kwenye WebRTC: p2p, wachezaji wengi, muda wa sifuri
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

    Chanzo huria cha uchezaji wa wingu kwenye WebRTC: p2p, wachezaji wengi, muda wa sifuri
    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.

    Chanzo huria cha uchezaji wa wingu kwenye WebRTC: p2p, wachezaji wengi, muda wa sifuri
    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.
    Chanzo huria cha uchezaji wa wingu kwenye WebRTC: p2p, wachezaji wengi, muda wa sifuri
    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.

    Chanzo huria cha uchezaji wa wingu kwenye WebRTC: p2p, wachezaji wengi, muda wa sifuri
    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.

    Chanzo huria cha uchezaji wa wingu kwenye WebRTC: p2p, wachezaji wengi, muda wa sifuri
    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

    Chanzo huria cha uchezaji wa wingu kwenye WebRTC: p2p, wachezaji wengi, muda wa sifuri
    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.

    Chanzo huria cha uchezaji wa wingu kwenye WebRTC: p2p, wachezaji wengi, muda wa sifuri
    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.

Chanzo: mapenzi.com

Kuongeza maoni