Vula umthombo womdlalo welifu kwiWebRTC: p2p, abadlali abaninzi, zero latency

Vula umthombo womdlalo welifu kwiWebRTC: p2p, abadlali abaninzi, zero latency
Isoftware njengenkonzo, iziseko zophuhliso njengenkonzo, iqonga njengenkonzo, iqonga lonxibelelwano njengenkonzo, inkomfa yevidiyo njengenkonzo, kuthekani ngemidlalo yelifu njengenkonzo? Sele kukho iinzame ezininzi zokwenza umdlalo welifu (i-Cloud Gaming), efana neStadia, esandula ukusungulwa nguGoogle. Stadia ayintshanga kwiWebRTC, kodwa ngaba abanye bangasebenzisa iWebRTC ngendlela efanayo?

U-Thanh Nguyen uthathe isigqibo sokuvavanya eli thuba kwiprojekthi yakhe yomthombo ovulekileyo we-CloudRetro. CloudRetro isekwe kwiPion, ethandwayo Ithala leencwadi leWebRTC esekwe kwiGo (enkosi Ibonisiwe ukusuka kwiqela lophuhliso lwePion ngoncedo lwabo ekulungiseleleni eli nqaku). Kweli nqaku, u-Thanh unika inkcazo yoyilo lweprojekthi yakhe, kwaye uthetha malunga nokuba zeziphi izinto eziluncedo azifundileyo kunye nemingeni adibana nayo ngexesha lomsebenzi wakhe.

ukungena

Kunyaka ophelileyo, xa uGoogle ebhengeza iStadia, yabetha ingqondo yam. Lo mbono ukhethekile kwaye uvelisa izinto ezintsha kangangokuba bendihlala ndizibuza ukuba kwenzeka njani na ngetekhnoloji ekhoyo. Umnqweno wokuqonda ngcono esi sihloko undibangele ukuba ndenze inguqulelo yam yomdlalo welifu ovulelekileyo. Isiphumo saba simnandi nje. Ngezantsi ndingathanda ukwabelana ngenkqubo yokusebenza kunyaka wam iprojekthi.

I-TLDR: inguqulelo yesilayidi esifutshane esinamagqabantshintshi

Kutheni imidlalo yamafu ikamva

Ndiyakholelwa ukuba i-Cloud Gaming kungekudala iza kuba sisizukulwana esilandelayo semidlalo kuphela, kodwa nezinye iindawo zesayensi yekhompyuter. Umdlalo welifu yeyona nto iphambili yomxhasi/imodeli yomncedisi. Lo mzekelo ukhulisa umva wolawulo kwaye unciphise umsebenzi we-frontend ngokubamba i-logic yomdlalo kwi-server ekude kunye nokusasaza imifanekiso / i-audio kumthengi. Umncedisi wenza umsebenzi onzima ukuze umxhasi akasekho kwinceba yokunciphisa i-hardware.

I-Google Stadia ikuvumela ukuba udlale AAA imidlalo (okt imidlalo ye-blockbuster ephezulu) kwi-interface efana ne-YouTube. Indlela efanayo inokusetyenziswa kwezinye izicelo ezinzima ngaphandle kweintanethi ezifana nenkqubo yokusebenza okanye i-2D/3D uyilo lwegraphic, njl. ukuze sikwazi ukuziqhuba ngokungaguqukiyo kwizixhobo ezisezantsi kwiiplatifti ezininzi.

Vula umthombo womdlalo welifu kwiWebRTC: p2p, abadlali abaninzi, zero latency
Ikamva lale teknoloji: Khawufane ucinge ukuba iMicrosoft Windows 10 isebenza kwisiphequluli seChrome?

Imidlalo yamafu ingumceli mngeni ngokobuchwephesha

Ukudlala yenye yezo ndawo zinqabileyo apho rhoqo, impendulo yomsebenzisi ekhawulezayo ifuneka. Ukuba ngamanye amaxesha sidibana nokulibaziseka kwemizuzwana emi-2 xa ucofa kwiphepha, oku kwamkelekile. Imijelo yevidiyo ephilayo idla ngokuhlala imizuzwana embalwa, kodwa ibonelela ngokusebenziseka okufanelekileyo. Nangona kunjalo, ukuba umdlalo uhlala uhleli nge-500ms, awudlaleki. Injongo yethu kukufezekisa i-latency ephantsi kakhulu ukwenzela ukuba i-gap phakathi kwegalelo kunye nemidiya ibe yincinci kangangoko. Ke ngoko, indlela yemveli yokusasaza ividiyo ayisebenzi apha.

Vula umthombo womdlalo welifu kwiWebRTC: p2p, abadlali abaninzi, zero latency
Isakhelo seMidlalo yeLifu ngokubanzi

Vula umthombo weprojekthi CloudRetro

Ndigqibe ekubeni ndenze isampula yovavanyo lomdlalo welifu ukuze ndibone ukuba yonke le nto inokwenzeka ngezithintelo zenethiwekhi ezinje. Ndakhetha iGolang ngenxa yobungqina bengqiqo kuba yayilulwimi endandilwazi kakhulu kwaye lwalufaneleka ngokufanelekileyo kolu kuphunyezwa ngenxa yezizathu ezininzi, njengoko ndafumanisa kamva. I-Go ilula kwaye iphuhlisa ngokukhawuleza; Imijelo kwi-Go ilungile ekulawuleni i-multithreading.

Le projekthi CloudRetro.io yinkonzo evulelekileyo yokudlala ilifu yomdlalo we-retro. Injongo yeprojekthi kukuzisa owona mdlalo ukhululekileyo kwimidlalo ye-retro yemveli kunye nokongeza abadlali abaninzi.
Unokufunda ngakumbi malunga neprojekthi apha: https://github.com/giongto35/cloud-game.

CloudRetro ukusebenza

I-CloudRetro isebenzisa imidlalo ye-retro ukubonisa amandla omdlalo welifu. Okukuvumela ukuba ufumane amava amaninzi okudlala awodwa.

  • Ukuphatheka komdlalo
    • Ukudlala kwangoko xa uvula iphepha; akukho ukhuphelo okanye ufakelo olufunekayo
    • Isebenza kwisikhangeli esiphathwayo, ngoko ke akukho software ifunekayo ukuyiqhuba

  • Iiseshoni zomdlalo zinokwabelwana ngazo kwizixhobo ezininzi kwaye zigcinwe efini kwixesha elizayo xa ungena
  • Umdlalo unokusasazwa, okanye unokudlalwa ngabasebenzisi abaninzi ngexesha elinye:
    • Ukudlala kwabantu abaninzi njengeTwitchPlayPokemon, kuphela iqonga elinqamlezayo kunye nexesha lokwenyani
    • Imidlalo engaxhunyiwe kwi-intanethi. Abasebenzisi abaninzi banokudlala ngaphandle kokuseta inethiwekhi. I-Samurai Shodown ngoku inokudlalwa ngabadlali aba-2 ngaphezulu kwenethiwekhi ye-CloudRetro

    Vula umthombo womdlalo welifu kwiWebRTC: p2p, abadlali abaninzi, zero latency
    Idemo yedemo yomdlalo wabadlali abaninzi kwi-intanethi kwizixhobo ezahlukeneyo

    Izibonelelo

    Iimfuno kunye neteknoloji stack

    Apha ngezantsi kuluhlu lweemfuno endizibeke phambi kokuba ndiqalise iprojekthi.

    1. Umdlali omnye
    Le mfuno isenokungabonakali ibaluleke kakhulu okanye icace apha, kodwa yenye yezinto endizithathayo, ivumela umdlalo welifu ukuba uhlale kude kwiinkonzo zokusasaza zemveli kangangoko kunokwenzeka. Ukuba sigxile kumdlalo womdlali omnye, sinokususa iseva esembindini okanye i-CDN kuba akufuneki sisasazeke siye ebantwini. Esikhundleni sokulayisha imilambo kwi-server ye-sink okanye ukudlulisa iipakethi kwi-server ye-WebSocket ephakathi, imijelo yenkonzo ihanjiswa ngokuthe ngqo kumsebenzisi ngokusebenzisa uxhumano lwe-WebRTC lontanga.

    2. Umjelo weendaba osezantsi we-latency
    Ukufunda malunga neStadia, ndihlala ndibona iWebRTC ekhankanywe kwamanye amanqaku. Ndiqaphele ukuba iWebRTC yitekhnoloji ebalaseleyo kwaye ifanelekile ukuba isetyenziswe kumdlalo wamafu. I-WebRTC yiprojekthi ebonelela ngeziphequluli zewebhu kunye nezicelo zeselula ngonxibelelwano lwexesha langempela nge-API elula. Inika unxibelelwano lontanga ukuya koontanga, lulungiselelwe imidiya, kwaye ineekhowudi eziqhelekileyo ezakhelwe ngaphakathi njengeVP8 kunye ne-H264.

    Ndibeke phambili ukuqinisekisa amava omsebenzisi angcono kunokugcina imizobo ekumgangatho ophezulu. Ezinye iilahleko ziyamkeleka kwi-algorithm. I-Google Stadia inenyathelo elongezelelweyo lokunciphisa ubungakanani bomfanekiso kwiseva, kwaye iifreyimu zinyuselwe kumgangatho ophezulu ngaphambi kokuba zidluliselwe kontanga.

    3. Iziseko ezingundoqo ezisasaziweyo ezineendlela zejografi
    Kungakhathaliseki ukuba i-algorithm yoxinzelelo kunye nekhowudi iphuculwe kangakanani, inethiwekhi isesona sigqibo esenza igalelo kakhulu kwi-latency. Uyilo kufuneka lube nesixhobo sokudibanisa umncedisi okufutshane nomsebenzisi ukunciphisa ixesha lokuya nokubuya (RTT). Uyilo kufuneka lube nomnxibelelanisi omnye kunye neeseva ezininzi zokusasaza ezisasazwa kwihlabathi liphela: i-US West, i-US East, iYurophu, iSingapore, iChina. Zonke iiseva zostrimisho kufuneka zibe zodwa ngokupheleleyo. Inkqubo inokulungelelanisa ukuhanjiswa kwayo xa umncedisi ejoyina okanye eshiya inethiwekhi. Ke, ngetrafikhi enkulu, ukongeza iiseva ezongezelelweyo kuvumela ukukala okuthe tye.

    4. Ukuhambelana kwebhrawuza
    Imidlalo yamafu yeyona ilungileyo xa ifuna ubuncinci kubasebenzisi. Oku kuthetha ukuba kunokwenzeka ukuba usebenze kwisikhangeli. Abakhangeli banceda ukwenza amava okudlala akhululeke kangangoko kunokwenzeka kubasebenzisi, bewagcina ekufakeni isoftware kunye nehardware. Iibrowser zikwanceda ukubonelela ngokusebenza kweplatform phakathi kweenguqulelo zeselfowuni kunye nedesktop. Ngethamsanqa, iWebRTC ixhaswa kakuhle kwiibhrawuza ezahlukeneyo.

    5. Ukwahlula okucacileyo kojongano lomdlalo kunye nenkonzo
    Ndijonga inkonzo yokudlala ilifu njengeqonga. Wonke umntu kufuneka akwazi ukudibanisa nantoni na kwiqonga. Ngoku ndidibanise LibRetro ngenkonzo yokudlala ilifu kuba iLibRetro ibonelela ngojongano oluhle lomdlalo we-emulator kwimidlalo ye-retro efana neSNES, GBA, PS.

    6. Amagumbi omdlalo wabadlali abaninzi, umdlalo wezihlwele kunye nokudibanisa kwangaphandle (i-deep-link) kunye nomdlalo
    I-CloudRetro ixhasa imidlalo emininzi emitsha efana neCrowdPlay kunye ne-Intanethi yabadlali abaninzi kwimidlalo ye-retro. Ukuba abasebenzisi abaninzi bavula ikhonkco elinzulu elifanayo kwiikhompyuter ezahlukeneyo, baya kubona umdlalo ofanayo obalekayo kwaye baya kuba nakho ukuwujoyina.

    Ngaphezu koko, iindawo zomdlalo zigcinwa kwindawo yokugcina ilifu. Oku kuvumela abasebenzisi ukuba baqhubeke nokudlala nangaliphi na ixesha kuso nasiphi na esinye isixhobo.

    7. Ukulinganisa okuthe tye
    Njengayo nayiphi na i-SAAS kule mihla, umdlalo welifu kufuneka uyilwe ukuba unyuke ngokuthe tye. Uyilo lomnxibelelanisi-umsebenzi lukuvumela ukuba wongeze abasebenzi abaninzi ukuze bakhonze ngakumbi i-traffic.

    8. Akukho xhulumaniso kwilifu elinye
    Isiseko se-CloudRetro sibanjwe kubaboneleli belifu abahlukeneyo (i-Digital Ocean, i-Alibaba, umboneleli wesiko) kwimimandla eyahlukeneyo. Ndivumela ukuba usebenze kwisikhongozeli se-Docker kwisiseko kwaye uqwalasele useto lwenethiwekhi usebenzisa iskripthi se-bash ukunqanda ukutshixelwa kumnikezeli welifu omnye. Ngokudibanisa oku kunye ne-NAT Traversal kwiWebRTC, sinokuba bhetyebhetye wokuhambisa i-CloudRetro nakweliphi na iqonga lelifu kunye nakuwo nawuphi na umatshini womsebenzisi.

    Uyilo lwezakhiwo

    Umsebenzi: (okanye iseva yostrimisho ekhankanywe ngasentla) iphinda-phinda imidlalo, iqhuba umbhobho wekhowudi, kwaye isasaze imidiya ekhowudiweyo kubasebenzisi. Iimeko zabasebenzi zisasazwa kwihlabathi liphela, kwaye umsebenzi ngamnye unokusingatha iiseshini zabasebenzisi ezininzi ngaxeshanye.

    Umnxibelelanisi: unoxanduva lokudibanisa umsebenzisi omtsha kunye noyena msebenzi ufanelekileyo wokusasaza. Umnxibelelanisi unxibelelana nabasebenzi ngeWebSocket.

    Indawo yokugcina umdlalo: indawo yokugcina ephakathi kuyo yonke imimandla yomdlalo. Olu gcino lubonelela ngemisebenzi ebalulekileyo njengokugcina/umthwalo okude.

    Vula umthombo womdlalo welifu kwiWebRTC: p2p, abadlali abaninzi, zero latency
    Uyilo oluphezulu lwe-CloudRetro

    Ushicilelo lweSiko

    Xa umsebenzisi omtsha evula i-CloudRetro kumanyathelo 1 kunye ne-2 aboniswe kumzobo ongezantsi, umququzeleli kunye noluhlu lwabasebenzi abakhoyo bayacelwa kwiphepha lokuqala. Emva koku, kwinyathelo lesi-3 umxhasi ubala ukulibaziseka kwabo bonke abaviwa usebenzisa isicelo se-ping ye-HTTP. Olu luhlu lokulibaziseka luthunyelwa emva kumququzeleli ukuze abone oyena msebenzi ufanelekileyo ukuba akhonze umsebenzisi. Inyathelo lesi-4 ngezantsi lidala umdlalo. Uqhagamshelo losasazo lweWebRTC lusekiwe phakathi komsebenzisi kunye nomsebenzi owabelweyo.
    Vula umthombo womdlalo welifu kwiWebRTC: p2p, abadlali abaninzi, zero latency
    Iskripthi somsebenzisi emva kokufumana ukufikelela

    Yintoni ngaphakathi emsebenzini

    Imibhobho yomdlalo kunye nokusasaza igcinwa ngaphakathi komsebenzi ngokuzimeleyo kunye nokutshintshiselana ngolwazi apho ngojongano. Okwangoku, olu nxibelelwano lwenziwa ngokudlulisela idatha kwimemori nge Iitshaneli zeGolang kwinkqubo efanayo. Injongo elandelayo kukuhlukana, okt. ukuqaliswa okuzimeleyo komdlalo kwenye inkqubo.

    Vula umthombo womdlalo welifu kwiWebRTC: p2p, abadlali abaninzi, zero latency
    Ukusebenzisana kwamacandelo abasebenzi

    Amalungu aphambili:

    • I-WebRTC: icandelo lomxhasi elamkela igalelo lomsebenzisi kunye nemveliso yemidiya ekhowudiweyo evela kumncedisi.
    • Isilinganisi somdlalo: icandelo lomdlalo. Ngombulelo kwilayibrari ye-Libretro, inkqubo iyakwazi ukuqhuba umdlalo ngaphakathi kwenkqubo efanayo kunye ne-internal intercept media kunye ne-input stream.
    • Izakhelo zomdlalo zibanjwa kwaye zithunyelwe kwi-encoder.
    • Umfanekiso/Isifakeli khowudi somsindo: umbhobho wekhowudi ethatha izakhelo zemidiya, ifake iikhowudi ngasemva, kwaye ikhuphe imifanekiso ekhowudiweyo/umsindo.

    Ukuphunyezwa

    I-CloudRetro ixhomekeke kwiWebRTC njengetekhnoloji yomqolo wayo, ke ngaphambi kokuntywila kwiinkcukacha zokuphunyezwa kweGolang, ndigqibe kwelokuba ndithethe ngeWebRTC ngokwayo. Le teknoloji emangalisayo eye yandinceda kakhulu ekufezekiseni i-latency ye-sub-second yokusasaza idatha.

    WebRTC

    IWebRTC yenzelwe ukubonelela ngonxibelelwano olukumgangatho ophezulu kontanga-kuontanga kwii-apps zomthonyama zomthonyama kunye nezikhangeli zisebenzisa ii-API ezilula.

    Ukuhanjiswa kweNAT

    I-WebRTC yaziwa ngokusebenza kwayo kwe-NAT Traversal. IWebRTC yenzelwe unxibelelwano lwabalingane. Injongo yayo kukufumana eyona ndlela ifanelekileyo ethe ngqo, ukunqanda amasango e-NAT kunye ne-firewall yokunxibelelana koontanga ngenkqubo ebizwa. ICE. Njengenxalenye yale nkqubo, iWebRTC APIs ifumana idilesi kawonke-wonke ye IP usebenzisa abancedisi be STUN kwaye bayigqithisele kumncedisi wodluliselo (JIKA) xa udibaniso oluthe ngqo lungenakusekwa.

    Nangona kunjalo, i-CloudRetro ayilisebenzisi ngokupheleleyo eli nqaku. Unxibelelwano lontanga-kwintanga alukho phakathi kwabasebenzisi, kodwa phakathi kwabasebenzisi kunye neeseva zefu. Icala lomncedisi wemodeli linezithintelo ezimbalwa zonxibelelwano oluthe ngqo kunesixhobo esiqhelekileyo somsebenzisi. Oku kukuvumela ukuba uvule kwangaphambili amazibuko angenayo okanye usebenzise iidilesi zikawonke-wonke ze-IP ngokuthe ngqo, kuba umncedisi akakho emva kwe-NAT.

    Ngaphambili, bendifuna ukuguqula iprojekthi ibe liqonga lokusasaza umdlalo kwi-Cloud Gaming. Umbono yayikukuvumela abadali bemidlalo ukuba babonelele ngemidlalo kunye nezixhobo zokusasaza. Kwaye abasebenzisi baya kusebenzisana nababoneleli ngokuthe ngqo. Ngale ndlela yokwabela amagunya, i-CloudRetro sisikhokelo nje sokuqhagamshela izixhobo zokusasaza zomntu wesithathu kubasebenzisi, iyenza ibe nzima ngakumbi xa ingasabanjwa. Indima yeWebRTC NAT Traversal apha ibaluleke kakhulu ukuququzelela uxhulumaniso lontanga-to-peer ukuqaliswa kwimithombo yokusasaza yomntu wesithathu, okwenza kube lula kumdali ukuba axhumeke kwinethiwekhi.

    Uxinzelelo lwevidiyo

    Uxinzelelo lwevidiyo yinxalenye eyimfuneko yombhobho kwaye inegalelo elikhulu ekuhambeni kakuhle. Ngelixa kungeyomfuneko ukwazi zonke iinkcukacha zeVP8/H264 encoding yevidiyo, ukuqonda iikhonsepthi kunokukunceda uqonde iinketho zesantya sevidiyo yokusasaza, ukulungisa isimilo esingalindelekanga, kwaye uhlengahlengise ukubambezeleka.

    Ukucinezela ividiyo yenkonzo yokusasazwa ngumngeni kuba i-algorithm kufuneka iqinisekise ukuba ixesha elipheleleyo lokufaka ikhowudi + ixesha lokuhambisa inethiwekhi + ixesha lokudibanisa liphantsi kangangoko. Ukongeza, inkqubo yokubhalwa kweekhowudi kufuneka ihambelane kwaye iqhubeke. Olunye urhwebo lwekhowudi alusebenziβ€”umzekelo, asinakukhetha amaxesha amade eekhowudi ngaphezu kobungakanani beefayile ezincinci kunye namaxesha okuguqula iikhowudi, okanye sisebenzise ucinezelo olungangqinelaniyo.

    Umbono emva koxinzelelo lwevidiyo kukuphelisa amasuntswana olwazi olungeyomfuneko ngelixa ugcina inqanaba elamkelekileyo lokuchaneka kubasebenzisi. Ukongeza kwi-encoding yezakhelo zemifanekiso emileyo yomntu ngamnye, i-algorithm ifaka isakhelo sangoku ukusuka kweyangaphambili nezilandelayo, ngoko ke umahluko wabo kuphela uthunyelwa. Njengoko kunokubonwa kumzekelo kunye nePacman, kuphela ngamanqaku ahlukeneyo ahanjiswayo.

    Vula umthombo womdlalo welifu kwiWebRTC: p2p, abadlali abaninzi, zero latency
    Ukuthelekiswa kwezakhelo zevidiyo usebenzisa iPacman njengomzekelo

    Uxinzelelo lomsindo

    Ngokunjalo, i-algorithm yoxinzelelo lomsindo ishiya idatha engenakuqondwa ngabantu. Okwangoku i-Opus yeyona codec iqhuba kakuhle kakhulu. Yenzelwe ukuhambisa i-audio wave phezu kweprotocol elandelwayo yedathagram efana ne-RTP (iProtokholi yoThutho lweXesha lokwenyani). I-latency yayo iphantsi kune-mp3 kunye ne-aac, kwaye umgangatho uphezulu. I-latency ihlala ijikeleze i-5 ~ 66,5ms.

    I-Pion, iWebRTC eGolang

    Inkqantosi yiprojekthi yomthombo ovulekileyo ezisa iWebRTC kwiGolang. Endaweni yokusongwa okuqhelekileyo kwamathala eencwadi e-C++ eWebRTC, iPion yinzalelwane yaseGolang yokuphunyezwa kweWebRTC ngokusebenza okungcono, ukudityaniswa kweGo, kunye nolawulo loguqulelo kwiiprothokholi zeWebRTC.

    Ithala leencwadi likwavumela ukusasazwa kwezinto ezininzi ezakhelwe ngaphakathi kunye ne-sub-second latency. Inokuphunyezwa kwayo kwe-STUN, DTLS, SCTP, njl. kunye neminye imifuniselo nge-QUIC kunye neWebAssembly. Eli thala leencwadi elivulelekileyo ngokwalo sisixhobo esihle sokufunda esinamaxwebhu agqwesileyo, ukuphunyezwa kweprotocol yenethiwekhi, kunye nemizekelo epholileyo.

    Uluntu lwasePion, olukhokelwa ngumdali onomdla kakhulu, ludlamkile, luneengxoxo ezininzi ezisemgangathweni malunga neWebRTC. Ukuba unomdla kobu buchwepheshe, joyina http://pion.ly/slack – uya kufunda izinto ezininzi ezintsha.

    Ukubhala i-CloudRetro kwi-Golang

    Vula umthombo womdlalo welifu kwiWebRTC: p2p, abadlali abaninzi, zero latency
    Ukuphunyezwa komsebenzi kwi-Go

    Yiya kwi-Action Channels

    Enkosi kuyilo oluhle lwetshaneli yeGo, iingxaki zokusasaza umsitho kunye neconcurrency zenziwe lula kakhulu. Njengomzobo, iiGoRoutines ezahlukeneyo zineenxalenye ezininzi ezisebenza ngokunxuseneyo. Icandelo ngalinye lilawula imeko yalo kwaye linxibelelana ngamajelo. Ubango olukhethiweyo lukaGolang lunyanzelisa isiganeko esinye seathom ukuba siqwalaselwe ngalo lonke ixesha kumdlalo (uphawu lomdlalo). Oku kuthetha ukuba akukho lutshixo lufunekayo kolu yilo. Umzekelo, xa umsebenzisi egcina, i-snapshot epheleleyo yesimo somdlalo siyafuneka. Le meko kufuneka ihlale iqhubekile, ingena de ugcino lugqitywe. Ngexesha lomdlalo ngamnye wokuphawula, i-backend inokusingatha kuphela ukugcinwa okanye ukusebenza kwegalelo, ukwenza inkqubo yenkqubo ikhuseleke.

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

    Umlandeli-ngaphakathi/Fan-out

    Le template yeGolang ilingana neCrowdPlay yam kunye neMidlalo emininzi yokusetyenziswa ngokugqibeleleyo. Ukulandela le pateni, onke amagalelo omsebenzisi kwigumbi elinye akhelwe kumjelo ophakathi wokungena. Imidiya yomdlalo isasazwa kubo bonke abasebenzisi kwigumbi elinye. Ngale ndlela, sifezekisa ulwahlulo lomdlalo phakathi kweeseshini ezininzi zomdlalo zabasebenzisi abohlukeneyo.

    Vula umthombo womdlalo welifu kwiWebRTC: p2p, abadlali abaninzi, zero latency
    Ungqamaniso phakathi kweeseshini ezahlukeneyo

    Ukungalungi kweGolang

    IGolang ayifezekanga. Ijelo liyacotha. Xa kuthelekiswa nokuthintela, itshaneli yeGo yindlela elula yokusingatha imisitho ehambelanayo kunye nentambo, kodwa itshaneli aliboneleli ngeyona ntsebenzo ibalaseleyo. Kukho ingqiqo yokuthintela entsonkothileyo phantsi kwetshaneli. Ke ndenze uhlengahlengiso ekuphunyezweni, ndifaka kwakhona izitshixo kunye namaxabiso eatom xa nditshintsha amajelo okuphucula ukusebenza.

    Ukongeza, umqokeleli wenkunkuma eGolang akalawulwa, nto leyo ngamanye amaxesha ibangela unqumamo olude ngokukrokrisayo. Oku kuphazamisa kakhulu usetyenziso lwexesha lokwenyani lokusasaza.

    COG

    Iprojekthi isebenzisa umthombo okhoyo ovulekileyo weGolang VP8/H264 ilayibrari yoxinzelelo lwemidiya kunye neLibretro yee-emulators zomdlalo. Onke la mathala zizinto ezisongayo zethala leencwadi elikwi-Go usebenzisa COG. Ezinye zezinto ezingeloncedo zidweliswe kuyo esi sithuba nguDave Cheney. Iingxaki endidibene nazo:

    • ukungakwazi ukubamba ingozi kwi-CGO, nakwi-Golang RecoveryCrash;
    • ukusilela ekuchongeni imiqobo yokusebenza xa singakwazi ukubona iingxaki ezineenkcukacha kwiCGO.

    isiphelo

    Ndiyifezekisile injongo yam yokuqonda iinkonzo zemidlalo yelifu kunye nokudala iqonga elindincedayo ukuba ndidlale imidlalo ye-retro ye-nostalgic kunye nabahlobo bam kwi-intanethi. Le projekthi ayinakwenzeka ngaphandle kwethala leencwadi lasePion kunye nenkxaso yoluntu lwasePion. Ndinombulelo ongazenzisiyo ngophuhliso lwayo olunzulu. Ii-API ezilula ezibonelelwa yiWebRTC kunye nePion ziqinisekise ukuhlanganiswa okungenamthungo. Ubungqina bam bokuqala bengcinga bakhululwa kwangaloo veki, nangona ndandingenalo ulwazi lwangaphambili lonxibelelwano lontanga-to-peer (P2P).

    Ngaphandle kokudityaniswa ngokulula, ukusasazwa kweP2P ngokwenene yindawo entsonkothileyo kwisayensi yekhompyuter. Ufanele ajongane nobunzima bezakhiwo zenethiwekhi ezide ezinje nge-IP kunye ne-NAT ukwenza iseshoni yoontanga. Ngelixa ndisebenza kule projekthi, ndifumene ulwazi oluninzi oluxabisekileyo malunga nokunxibelelana kunye nokusebenza kakuhle, ngoko ke ndikhuthaza wonke umntu ukuba azame ukwakha iimveliso zeP2P usebenzisa iWebRTC.

    I-CloudRetro ibonelela kuzo zonke iimeko zokusetyenziswa endizilindeleyo ngokwembono yam njengomdlali we-retro. Nangona kunjalo, ndicinga ukuba zininzi iindawo kwiprojekthi endinokuthi ndiziphucule, ezifana nokwenza inethiwekhi ithembeke ngakumbi kwaye isebenze, ukubonelela ngemizobo yomdlalo ophezulu, okanye ukukwazi ukwabelana ngemidlalo phakathi kwabasebenzisi. Ndisebenza nzima kule nto. Nceda ulandele iprojekthi kwaye uyixhase ukuba uyathanda.

umthombo: www.habr.com

Yongeza izimvo