Imidlalo yamafu yomthombo ovulekile ku-WebRTC: p2p, abadlali abaningi, i-zero latency

Imidlalo yamafu yomthombo ovulekile ku-WebRTC: p2p, abadlali abaningi, i-zero latency
Isofthiwe njengesevisi, ingqalasizinda njengesevisi, inkundla njengesevisi, inkundla yokuxhumana njengesevisi, inkomfa ngevidiyo njengesevisi, kuthiwani ngokudlala ngamafu njengesevisi? Sekuvele kube nemizamo eminingana yokwakha imidlalo yamafu (i-Cloud Gaming), efana ne-Stadia, esanda kwethulwa yi-Google. I-Stadia ayintsha ku-WebRTC, kodwa ingabe abanye bangakwazi ukusebenzisa i-WebRTC ngendlela efanayo?

U-Thanh Nguyen unqume ukuhlola leli thuba kuphrojekthi yakhe yomthombo ovulekile i-CloudRetro. I-CloudRetro isekelwe ku-Pion, edumile Umtapo wezincwadi we-WebRTC osuselwe ku-Go (siyabonga Kubonisiwe kusukela ethimbeni labathuthukisi bePion ngosizo lwabo ekulungiseleleni lesi sihloko). Kulesi sihloko, u-Thanh unikeza isifinyezo sesakhiwo sephrojekthi yakhe, futhi ukhuluma ngokuthi yiziphi izinto eziwusizo azifundile nokuthi yiziphi izinselele ahlangabezane nazo ngesikhathi somsebenzi wakhe.

entry

Ngonyaka odlule, lapho i-Google imemezela i-Stadia, yangihlaba umxhwele. Lo mbono uhlukile futhi usungula izinto ezintsha kangangokuthi ngangihlale ngizibuza ukuthi lokhu kungenzeka kanjani ngobuchwepheshe obukhona. Isifiso sokuqonda kangcono lesi sihloko singenze ngenza inguqulo yami yegeyimu yefu yomthombo ovulekile. Umphumela wawumane umangalisa. Ngezansi ngithanda ukwabelana ngenqubo yokusebenza onyakeni wami iphrojekthi.

I-TLDR: inguqulo yesilayidi esifushane esinezithombe ezinhle kakhulu

Kungani imidlalo yamafu iyikusasa

Ngikholelwa ukuthi i-Cloud Gaming maduze izoba isizukulwane esilandelayo sokudlala hhayi kuphela, kodwa nezinye izindawo zesayensi yekhompyutha. Imidlalo yamafu iyisiqongo semodeli yeklayenti/iseva. Le modeli ikhulisa ukuphathwa kwe-backend futhi inciphisa umsebenzi we-frontend ngokubamba umdlalo onengqondo kuseva ekude nokusakaza izithombe/umsindo kuklayenti. Iseva yenza ukucubungula okusindayo ukuze iklayenti lingabe lisasemseni wemikhawulo yezingxenyekazi zekhompyutha.

I-Google Stadia empeleni ikuvumela ukuthi udlale Imidlalo ye-AAA (okungukuthi. imidlalo ye-blockbuster ephezulu) kusixhumi esibonakalayo esifana ne-YouTube. Indlela efanayo ingasetshenziswa kwezinye izinhlelo zokusebenza ezinzima ezingaxhunyiwe ku-inthanethi ezifana nesistimu yokusebenza noma idizayini yesithombe ye-2D/3D, njll. ukuze sikwazi ukuwasebenzisa ngokungaguquki kumadivayisi ane-low-spec kuzo zonke izinkundla eziningi.

Imidlalo yamafu yomthombo ovulekile ku-WebRTC: p2p, abadlali abaningi, i-zero latency
Ikusasa lalobu buchwepheshe: Cabanga nje uma iMicrosoft Windows 10 isebenza kusiphequluli se-Chrome?

Imidlalo yamafu iyinselele ngokobuchwepheshe

Amageyimu angenye yalezo zindawo ezingavamile lapho impendulo yomsebenzisi eqhubekayo, esheshayo idingeka. Uma ngezikhathi ezithile sihlangabezana nokulibaziseka kwemizuzwana emi-2 lapho sichofoza ikhasi, lokhu kwamukelekile. Ukusakazwa kwamavidiyo abukhoma kuvame ukubambezeleka imizuzwana embalwa, kodwa kusanikeza ukusebenziseka okuphusile. Kodwa-ke, uma umdlalo uvame ukuhlehla ngo-500ms, awudlaleki. Umgomo wethu uwukufinyelela ukubambezeleka okuphansi kakhulu ukuze igebe phakathi kokufaka nemidiya libe lincane ngangokunokwenzeka. Ngakho-ke, indlela yendabuko yokusakaza ividiyo ayisebenzi lapha.

Imidlalo yamafu yomthombo ovulekile ku-WebRTC: p2p, abadlali abaningi, i-zero latency
Isifanekiso Esijwayelekile Segeyimu Yamafu

Iphrojekthi yomthombo ovulekile CloudRetro

Nginqume ukudala isampula yokuhlola yomdlalo wamafu ukuze ngibone ukuthi konke lokhu kungenzeka yini ngemikhawulo eqinile yenethiwekhi. Ngakhetha isiGolang ukuze ngithole ubufakazi bomqondo ngoba kwakuwulimi engangilwazi kahle futhi lwalufaneleka kahle kulokhu kuqaliswa ngenxa yezizathu eziningi, njengoba ngathola kamuva. I-Go ilula futhi ikhula ngokushesha okukhulu; Iziteshi ku-Go zinhle kakhulu ekuphatheni i-multithreading.

Le phrojekthi CloudRetro.io iyisevisi yemidlalo yamafu yomthombo ovulekile yemidlalo ye-retro. Umgomo wephrojekthi ukuletha umuzwa wegeyimu onethezeke kakhulu emidlalweni ye-retro yendabuko futhi wengeze abadlali abaningi.
Ungafunda kabanzi mayelana nephrojekthi lapha: https://github.com/giongto35/cloud-game.

Ukusebenza kwe-CloudRetro

I-CloudRetro isebenzisa imidlalo ye-retro ukukhombisa amandla emidlalo yamafu. Okukuvumela ukuthi uthole okuhlangenwe nakho okuningi okuhlukile kwegeyimu.

  • Ukuphatheka komdlalo
    • Ukudlala okusheshayo lapho uvula ikhasi; akukho ukulanda noma ukufakwa okudingekayo
    • Isebenza kusiphequluli seselula, ngakho-ke ayikho isofthiwe edingekayo ukuze uyiqalise

  • Amaseshini egeyimu angakwazi ukwabelwa kuwo wonke amadivayisi amaningi futhi agcinwe emafini ngesikhathi esilandelayo lapho ungena ngemvume
  • Umdlalo ungasakazwa, noma ungadlalwa ngabasebenzisi abambalwa ngesikhathi esisodwa:
    • I-crowdplay efana ne-TwitchPlayPokemon, inkundla ephambanayo kuphela kanye nesikhathi sangempela esengeziwe
    • Imidlalo engaxhunyiwe ku-inthanethi. Abasebenzisi abaningi bangadlala ngaphandle kokusetha inethiwekhi. I-Samurai Shodown manje ingadlalwa abadlali abangu-2 ngenethiwekhi ye-CloudRetro

    Imidlalo yamafu yomthombo ovulekile ku-WebRTC: p2p, abadlali abaningi, i-zero latency
    Inguqulo yedemo yomdlalo waku-inthanethi wabadlali abaningi kumadivayisi ahlukene

    Ingqalasizinda

    Izidingo kanye nesitaki sobuchwepheshe

    Ngezansi kunohlu lwezidingo engizibeke ngaphambi kokuqala iphrojekthi.

    1. Umdlali oyedwa
    Le mfuneko ingase ingabonakali ibaluleke kakhulu noma isobala lapha, kodwa ingenye yezinto zami ezibalulekile engizithathile, ivumela imidlalo yamafu ukuthi ihlale kude nezinsizakalo zokusakaza zendabuko ngangokunokwenzeka. Uma sigxila kugeyimu yomdlali oyedwa, singasusa iseva ephakathi nendawo noma i-CDN ngoba akudingekile ukuthi sisakazekele kubantu abaningi. Esikhundleni sokulayisha ukusakaza kuseva kasinki noma ukudlulisa amaphakethe kuseva ye-WebSocket ephakathi nendawo, ukusakazwa kwesevisi kulethwa ngqo kumsebenzisi ngoxhumano lwe-WebRTC oluntanga kuya kontanga.

    2. Ukusakazwa kwemidiya yokubambezeleka okuphansi
    Ukufunda nge-Stadia, ngivame ukubona i-WebRTC eshiwo kwezinye izindatshana. Ngabona ukuthi i-WebRTC iwubuchwepheshe obuvelele futhi ilungele ukusetshenziswa kumageyimu wamafu. I-WebRTC iphrojekthi ehlinzeka ngeziphequluli zewebhu nezinhlelo zokusebenza zeselula ngokuxhumana kwesikhathi sangempela nge-API elula. Inikeza ukuxhumana kontanga kuya kontanga, ithuthukiselwe imidiya, futhi inamakhodekhi ajwayelekile akhelwe ngaphakathi njenge-VP8 ne-H264.

    Ngibeke phambili ukuqinisekisa ulwazi lomsebenzisi olungcono kakhulu kunokugcina izithombe zekhwalithi ephezulu. Okunye ukulahlekelwa kuyamukeleka ku-algorithm. I-Google Stadia inesinyathelo esengeziwe sokunciphisa usayizi wesithombe kuseva, futhi ozimele bakhushulelwa kukhwalithi ephezulu ngaphambi kokudluliselwa kontanga.

    3. Ingqalasizinda esabalalisiwe enomzila wendawo
    Kungakhathaliseki ukuthi i-algorithm yokucindezela kanye nekhodi ithuthukiswe kangakanani, inethiwekhi iseyisici esinqumayo esinikela kakhulu ekubambezelekeni. Izakhiwo kufanele zibe nendlela yokumatanisa iseva eseduze nomsebenzisi ukuze kuncishiswe isikhathi sokuya nokubuya (RTT). Isakhiwo kufanele sibe nomxhumanisi ongu-1 namaseva amaningana okusakaza asatshalaliswa emhlabeni wonke: i-US West, i-US East, i-Europe, i-Singapore, i-China. Wonke amaseva okusakaza-bukhoma kufanele ahlukaniswe ngokuphelele. Isistimu ingalungisa ukusatshalaliswa kwayo lapho iseva ijoyina noma ishiya inethiwekhi. Ngakho, ngethrafikhi enkulu, ukwengeza amaseva engeziwe kuvumela ukukala okuvundlile.

    4. Ukuhambisana kwesiphequluli
    Imidlalo yamafu ihamba phambili uma idinga okungenani kubasebenzisi. Lokhu kusho ukuthi kungenzeka ukusebenza kusiphequluli. Iziphequluli zisiza ukwenza ukuzizwisa amageyimu kube ntofontofo ngangokunokwenzeka kubasebenzisi, zibasindise ekufakeni isofthiwe nehadiwe. Iziphequluli ziphinde zisize ekuhlinzekeni ukusebenza kwenkundla ehlukene phakathi kwezinguqulo zeselula nezedeskithophu. Ngenhlanhla, i-WebRTC isekelwa kahle kuzo zonke iziphequluli ezahlukahlukene.

    5. Ukuhlukaniswa okucacile kwesixhumi esibonakalayo segeyimu nesevisi
    Ngibuka isevisi yemidlalo yamafu njengenkundla. Wonke umuntu kufanele akwazi ukuxhuma noma yini endaweni yesikhulumi. Manje sengididiyele LibRetro ngensizakalo yokudlala yamafu ngoba i-LibRetro inikeza isikhombimsebenzisi esihle sokulingisa imidlalo ye-retro efana ne-SNES, i-GBA, i-PS.

    6. Amagumbi abadlali abaningi, ukudlala kwesixuku kanye nokuxhumanisa kwangaphandle (isixhumanisi esijulile) nomdlalo
    I-CloudRetro isekela imidlalo eminingi emisha efana ne-CrowdPlay ne-Online MultiPlayer yemidlalo ye-retro. Uma abasebenzisi abambalwa bevula isixhumanisi esijulile esifanayo kumakhompuyutha ahlukene, bazobona igeyimu efanayo isebenza futhi bazokwazi nokuyijoyina.

    Ngaphezu kwalokho, izifunda zegeyimu zigcinwa kusitoreji samafu. Lokhu kuvumela abasebenzisi ukuthi baqhubeke nokudlala noma kunini kunoma iyiphi enye idivayisi.

    7. Ukukala okuvundlile
    Njenganoma iyiphi i-SAAS namuhla, imidlalo yamafu kufanele yakhelwe ukuthi ikhule ivundlile. Idizayini yesisebenzi somxhumanisi ikuvumela ukuthi ungeze abasebenzi abaningi ukuze unikeze ithrafikhi eyengeziwe.

    8. Akukho ukuxhumana nefu elilodwa
    Ingqalasizinda ye-CloudRetro isingathwe kubahlinzeki befu abahlukene (i-Digital Ocean, i-Alibaba, umhlinzeki wangokwezifiso) wezifunda ezahlukene. Ngivumela ukusebenza esitsheni se-Docker engqalasizinda futhi ngilungise izilungiselelo zenethiwekhi ngisebenzisa iskripthi se-bash ukuze ngigweme ukukhiyelwa kumhlinzeki wefu oyedwa. Ngokuhlanganisa lokhu ne-NAT Traversal ku-WebRTC, singaba nekhono lokusebenzisa i-CloudRetro kunoma iyiphi iplathifomu yamafu ngisho nakumishini yanoma yimuphi umsebenzisi.

    Umklamo wezakhiwo

    Isisebenzi: (noma iseva yokusakaza eshiwo ngenhla) iphindaphinda imidlalo, isebenzisa ipayipi lombhalo wekhodi, futhi isakaza imidiya ebethelwe kubasebenzisi. Izimo zabasebenzi zisatshalaliswa emhlabeni wonke, futhi isisebenzi ngasinye singakwazi ukusingatha izikhathi zabasebenzisi abaningi ngesikhathi esisodwa.

    Umxhumanisi: unesibopho sokumatanisa umsebenzisi omusha nesisebenzi esifaneleka kakhulu sokusakaza-bukhoma. Umxhumanisi usebenzisana nabasebenzi ngeWebSocket.

    Isitoreji sesimo segeyimu: isitoreji esikude sazo zonke izifunda zegeyimu. Lesi sitoreji sihlinzeka ngemisebenzi ebalulekile njengokulondoloza/ukulayisha okukude.

    Imidlalo yamafu yomthombo ovulekile ku-WebRTC: p2p, abadlali abaningi, i-zero latency
    Izakhiwo ezisezingeni eliphezulu ze-CloudRetro

    Isikripthi Sangokwezifiso

    Lapho umsebenzisi omusha evula i-CloudRetro ezinyathelweni 1 no-2 eziboniswe esithombeni esingezansi, umxhumanisi kanye nohlu lwezisebenzi ezitholakalayo kucelwa ekhasini lokuqala. Ngemva kwalokhu, esinyathelweni sesi-3 iklayenti libala ukubambezeleka kwawo wonke amakhandidethi lisebenzisa isicelo se-HTTP ping. Lolu hlu lokubambezeleka lube selubuyiselwa kumxhumanisi ukuze akwazi ukunquma isisebenzi esifaneleka kakhulu esizosebenzela umsebenzisi. Isinyathelo sesi-4 ngezansi sidala igeyimu. Uxhumano lokusakaza-bukhoma lwe-WebRTC luyasungulwa phakathi komsebenzisi nomsebenzi owabelwe.
    Imidlalo yamafu yomthombo ovulekile ku-WebRTC: p2p, abadlali abaningi, i-zero latency
    Iskripthi somsebenzisi ngemva kokuthola ukufinyelela

    Yini engaphakathi kwesisebenzi

    Amapayipi wegeyimu nokusakaza agcinwa ngaphakathi kwesisebenzi eyedwa futhi ashintshisana ngolwazi lapho ngesixhumi esibonakalayo. Okwamanje, lokhu kuxhumana kwenziwa ngokudlulisela idatha ngenkumbulo nge Iziteshi ze-Golang ngenqubo efanayo. Umgomo olandelayo ukuhlukaniswa, i.e. ukwethulwa okuzimele komdlalo kwenye inqubo.

    Imidlalo yamafu yomthombo ovulekile ku-WebRTC: p2p, abadlali abaningi, i-zero latency
    Ukusebenzisana kwezingxenye zabasebenzi

    Izingxenye eziyinhloko:

    • I-WebRTC: ingxenye yeklayenti eyamukela okokufaka komsebenzisi kanye nokukhipha imidiya ebhalwe ngekhodi evela kuseva.
    • Isilingisi segeyimu: ingxenye yomdlalo. Ngenxa yelabhulali ye-Libretro, isistimu iyakwazi ukuqhuba igeyimu ngaphakathi kwenqubo efanayo futhi ibambe imidiya yangaphakathi nokusakaza okokufaka.
    • Ozimele abangaphakathi kwegeyimu bayathathwa baphinde bathunyelwe kusifaki khodi.
    • Isithombe/Isifaki khodi somsindo: ipayipi lombhalo wekhodi elithatha amafreyimu emidiya, liwabhale ngekhodi ngemuva, futhi likhiphe izithombe/umsindo obhalwe ngekhodi.

    Ukuqaliswa

    I-CloudRetro incike ku-WebRTC njengobuchwepheshe bayo bomgogodla, ngakho-ke ngaphambi kokungena emininingwaneni yokuqaliswa kwe-Golang, nginqume ukukhuluma ngeWebRTC ngokwayo. Lobu ubuchwepheshe obumangalisayo obungisize kakhulu ekuzuzeni ukubambezeleka kwesekhondi elincane lokusakaza idatha.

    I-WebRTC

    I-WebRTC yakhelwe ukuhlinzeka ngoxhumano lwekhwalithi ephezulu kontanga kuzinhlelo zokusebenza zeselula neziphequluli zisebenzisa ama-API alula.

    Ukuhamba kwe-NAT

    I-WebRTC yaziwa ngokusebenza kwayo kwe-NAT Traversal. I-WebRTC yakhelwe ukuxhumana kontanga kuya kontanga. Umgomo wayo ukuthola umzila oqondile ofaneleka kakhulu, ugwema amasango e-NAT nezicishamlilo zokuxhumana kontanga ngenqubo ebizwa ngokuthi. ICE. Njengengxenye yale nqubo, ama-WebRTC API athola ikheli lakho le-IP lomphakathi kusetshenziswa amaseva e-STUN futhi alithumele kuseva edluliselwe (VULA) lapho uxhumano oluqondile lungakwazi ukusungulwa.

    Nokho, i-CloudRetro ayisebenzisi ngokugcwele lesi sici. Ukuxhumana kwayo kontanga kuya kontanga akukho phakathi kwabasebenzisi, kodwa phakathi kwabasebenzisi namaseva wamafu. Uhlangothi lweseva lwemodeli lunemikhawulo embalwa yokuxhumana eqondile kunedivayisi yomsebenzisi evamile. Lokhu kukuvumela ukuthi uvule kusengaphambili izimbobo ezingenayo noma usebenzise amakheli e-IP omphakathi ngokuqondile, njengoba iseva ingekho ngemuva kwe-NAT.

    Ngaphambilini, bengifuna ukushintsha iphrojekthi ibe inkundla yokusabalalisa igeyimu ye-Cloud Gaming. Umqondo bekuwukuvumela abadali begeyimu ukuthi banikeze imidlalo nezinsiza zokusakaza. Futhi abasebenzisi bazoxhumana nabahlinzeki ngokuqondile. Ngale ndlela yokwehlukaniswa, i-CloudRetro iwuhlaka nje lokuxhumanisa izinsiza zokusakaza zezinkampani zangaphandle kubasebenzisi, ikwenze kube nzima kakhulu uma ingasaphathwa. Indima ye-WebRTC NAT Traversal lapha ibaluleke kakhulu ukuze kube lula ukuqaliswa kokuxhumana kontanga kuzinsiza zokusakaza zezinkampani zangaphandle, okwenza kube lula ngomdali ukuthi axhume kunethiwekhi.

    Ukucindezelwa kwevidiyo

    Ukucindezelwa kwevidiyo kuyingxenye ebalulekile yepayipi futhi kunomthelela omkhulu ekugelezeni okushelelayo. Nakuba kungenasidingo ukwazi yonke imininingwane yombhalo wekhodi wevidiyo we-VP8/H264, ukuqonda imiqondo kungakusiza uqonde izinketho zesivinini sevidiyo yokusakaza-bukhoma, ulungise iphutha lokuziphatha okungalindelekile, futhi ulungise ukubambezeleka.

    Ukucindezela ividiyo yesevisi yokusakaza kuyinselele ngoba i-algorithm kufanele iqinisekise ukuthi isikhathi esiphelele sombhalo wekhodi + isikhathi sokudlulisa inethiwekhi + nesikhathi sokukhipha amakhodi siphansi ngangokunokwenzeka. Ngaphezu kwalokho, inqubo yokufaka amakhodi kufanele ihambisane futhi iqhubeke. Okunye ukuhwebelana kombhalo wekhodi akusebenzi—ngokwesibonelo, asikwazi ukuvumela izikhathi ezinde zombhalo wekhodi kunosayizi bamafayela amancane nezikhathi zokukhipha amakhodi, noma sisebenzise ukucindezela okungahambisani.

    Umqondo wokucindezelwa kwevidiyo uwukuqeda izingcezu zolwazi ezingadingekile kuyilapho kugcinwa izinga elamukelekayo lokunemba kubasebenzisi. Ngokungeziwe ekubhaleni amafreyimu ezithombe ezimile ezingazodwana, i-algorithm ingena kuhlaka lwamanje olusuka kowangaphambilini nabalandelayo, ngakho kuthunyelwa umehluko wabo kuphela. Njengoba kungabonwa esibonelweni ngePacman, kudluliswa amaphuzu ahlukene kuphela.

    Imidlalo yamafu yomthombo ovulekile ku-WebRTC: p2p, abadlali abaningi, i-zero latency
    Ukuqhathaniswa kwamafreyimu wevidiyo kusetshenziswa i-Pacman njengesibonelo

    Ukucindezelwa komsindo

    Ngokufanayo, i-algorithm yokucindezela umsindo ishiya idatha engakwazi ukubonwa abantu. I-Opus okwamanje iyikhodekhi yomsindo esebenza kahle kakhulu. Iklanyelwe ukudlulisa igagasi lomsindo ngephrothokholi yedathagram e-odiwe njenge-RTP (I-Real Time Transport Protocol). Ukubambezeleka kwayo kuphansi kune-mp3 ne-aac, futhi ikhwalithi iphakeme. Ukubambezeleka kuvame ukuba ngu-5 ~ 66,5ms.

    I-Pion, i-WebRTC e-Golang

    I-Pawn iphrojekthi yomthombo ovulekile eletha i-WebRTC e-Golang. Esikhundleni sokugoqwa okuvamile kwemitapo yolwazi ye-C++ WebRTC, i-Pion iwukusebenzisa i-Golang yomdabu ye-WebRTC ngokusebenza okungcono, ukuhlanganiswa kwe-Go, nokulawula inguqulo kumaphrothokholi e-WebRTC.

    Umtapo wolwazi uphinde unike amandla ukusakaza ngokuningi okuhle okwakhelwe ngaphakathi nge-latency yesekhondi elincane. Inokuqaliswa kwayo kwe-STUN, DTLS, SCTP, njll. kanye nokuhlolwa okuthile nge-QUIC ne-WebAssembly. Le labhulali yomthombo ovulekile ngokwayo iyisisetshenziswa sokufunda esihle ngempela esinemibhalo emihle kakhulu, ukusetshenziswa kwephrothokholi yenethiwekhi, nezibonelo ezinhle.

    Umphakathi wakwaPion, oholwa ngumdali onentshiseko enkulu, uyaphila, unezingxoxo eziningi ezisezingeni eliphezulu eziqhubekayo mayelana ne-WebRTC. Uma unentshisekelo kulobu buchwepheshe, joyina http://pion.ly/slack - uzofunda izinto eziningi ezintsha.

    Ukubhala i-CloudRetro ngesi-Golang

    Imidlalo yamafu yomthombo ovulekile ku-WebRTC: p2p, abadlali abaningi, i-zero latency
    Ukwenziwa komsebenzi ku-Go

    Hamba eziteshini esenzweni

    Ngenxa yesakhiwo esihle sesiteshi se-Go, izinkinga zokusakazwa komcimbi nokuhambisana kwemali zenziwe zaba lula kakhulu. Njengakumdwebo, ama-GoRoutines ahlukene anezingxenye eziningi ezisebenza ngokufana. Ingxenye ngayinye ilawula isimo sayo futhi ixhumana ngamashaneli. Ukugomela okukhethiwe kuka-Golang kuphoqa umcimbi owodwa we-athomu ukuthi ucutshungulwe njalo kugeyimu (uphawu lwegeyimu). Lokhu kusho ukuthi akukho ukukhiya okudingekayo kulo mklamo. Isibonelo, uma umsebenzisi elondoloza, isifinyezo esigcwele sesimo segeyimu siyadingeka. Lesi simo kufanele sihlale siqhubekayo, singena kuze kuqedwe ukulondoloza. Phakathi nokumaka kwegeyimu ngayinye, i-backend ingaphatha kuphela ukusebenza kokulondoloza noma okokufaka, okwenza uchungechunge lwenqubo luphephe.

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

    I-Fan-in/Fan-out

    Lesi sifanekiso se-Golang silingana nekesi lami lokusebenzisa i-CrowdPlay kanye ne-Multiple Player. Ngokulandela le phethini, konke okokufaka komsebenzisi ekamelweni elilodwa kwakhelwa kumzila omaphakathi wokungena. Imidiya yegeyimu ibe isisetshenziswa kubo bonke abasebenzisi abasegunjini elilodwa. Ngale ndlela, sifinyelela ukuhlukaniswa kwesimo segeyimu phakathi kwamaseshini egeyimu ambalwa wabasebenzisi abahlukene.

    Imidlalo yamafu yomthombo ovulekile ku-WebRTC: p2p, abadlali abaningi, i-zero latency
    Ukuvumelanisa phakathi kwamaseshini ahlukene

    Ukungalungi kwe-Golang

    I-Golang ayiphelele. Isiteshi siyanensa. Uma kuqhathaniswa nokuvimbela, i-Go channel imane nje iyindlela elula yokusingatha imicimbi eyenzeka ngesikhathi esisodwa newuchungechunge, kodwa isiteshi asihlinzeki ngokusebenza okungcono kakhulu. Kunengqondo yokuvimba eyinkimbinkimbi ngaphansi kwesiteshi. Ngakho-ke ngenze izinguquko ezithile ekusebenziseni, ngifaka kabusha izingidi namanani e-athomu lapho ngishintsha iziteshi ukuze ngithuthukise ukusebenza.

    Ngaphezu kwalokho, inqola kadoti e-Golang ayilawuleki, ngezinye izikhathi okubangela ukuthi kube nokuma okude ngokusolisayo. Lokhu kuphazamisa kakhulu uhlelo lokusebenza lokusakaza ngesikhathi sangempela.

    I-CGO

    Iphrojekthi isebenzisa umthombo ovulekile okhona we-Golang VP8/H264 umtapo wokucindezela imidiya kanye ne-Libretro yama-emulators egeyimu. Yonke le mitapo yolwazi imane iwukugoqa komtapo C ku-Go usebenzisa I-CGO. Okunye okungalungile kubalwe ku lokhu okuthunyelwe nguDave Cheney. Izinkinga engihlangabezane nazo:

    • ukungakwazi ukubamba ukuphahlazeka ku-CGO, ngisho ne-Golang RecoveryCrash;
    • ukwehluleka ukukhomba izingqinamba zokusebenza lapho singakwazi ukuthola izinkinga ezinemininingwane ku-CGO.

    isiphetho

    Ngifinyelele umgomo wami wokuqonda izinsiza zemidlalo yamafu nokudala inkundla engisiza ukuthi ngidlale imidlalo ye-nostalgic retro nabangani bami ku-inthanethi. Le phrojekthi ibingeke yenzeke ngaphandle komtapo wolwazi wePion kanye nokusekelwa komphakathi wakwaPion. Ngibonga kakhulu ngokuthuthuka kwayo okujulile. Ama-API alula anikezwe i-WebRTC kanye ne-Pion aqinisekise ukuhlanganiswa okungenamthungo. Ubufakazi bami bokuqala bomqondo bakhululwa ngalo lelo sonto, nakuba ngangingenalo ulwazi lwangaphambili lokuxhumana kontanga (P2P).

    Naphezu kokulula kokuhlanganiswa, ukusakazwa kwe-P2P kuyindawo eyinkimbinkimbi kakhulu kwisayensi yekhompyutha. Kufanele abhekane nenkimbinkimbi yezakhiwo zenethiwekhi zesikhathi eside ezifana ne-IP ne-NAT ukuze akhe iseshini yontanga. Ngenkathi ngisebenza kule phrojekthi, ngithole ulwazi oluningi olubalulekile mayelana namanethiwekhi nokusebenza kahle, ngakho ngikhuthaza wonke umuntu ukuthi azame ukwakha imikhiqizo ye-P2P esebenzisa i-WebRTC.

    I-CloudRetro ibhekelela zonke izimo zokusetshenziswa ebengizilindele ngokombono wami njengomdlali we-retro. Nokho, ngicabanga ukuthi kunezindawo eziningi kuphrojekthi engingazithuthukisa, njengokwenza inethiwekhi ithembeke futhi isebenze kahle, ukuhlinzeka ngemifanekiso yegeyimu yekhwalithi ephezulu, noma ikhono lokwabelana ngamageyimu phakathi kwabasebenzisi. Ngisebenza kanzima kulokhu. Sicela ulandele iphrojekthi futhi usekele uma uthanda.

Source: www.habr.com

Engeza amazwana