Geamannan sgòthan stòr fosgailte air WebRTC: p2p, ioma-chluicheadair, neoni latency

Geamannan sgòthan stòr fosgailte air WebRTC: p2p, ioma-chluicheadair, neoni latency
Bathar-bog mar sheirbheis, bun-structar mar sheirbheis, àrd-ùrlar mar sheirbheis, àrd-ùrlar conaltraidh mar sheirbheis, co-labhairtean bhidio mar sheirbheis, dè mu dheidhinn cluich sgòthan mar sheirbheis? Chaidh grunn oidhirpean a dhèanamh mu thràth gus geamannan sgòthan (Cloud Gaming) a chruthachadh, leithid Stadia, a chaidh a chuir air bhog o chionn ghoirid le Google. Stadia chan eil e ùr do WebRTC, ach an urrainn do dhaoine eile WebRTC a chleachdadh san aon dòigh?

Cho-dhùin Thanh Nguyen an cothrom seo fheuchainn air a ’phròiseact stòr fosgailte aige CloudRetro. Tha CloudRetro stèidhichte air Pion, mòr-chòrdte Leabharlann WebRTC stèidhichte air Go (taing Air a shealltainn bhon sgioba leasachaidh Pion airson an cuideachadh ann a bhith ag ullachadh an artaigil seo). San artaigil seo, tha Thanh a’ toirt seachad sealladh farsaing air ailtireachd a’ phròiseict aige, agus cuideachd a’ bruidhinn air na rudan feumail a dh’ ionnsaich e agus na dùbhlain a choinnich e na chuid obrach.

Clàrachadh

An-uiridh, nuair a dh’ ainmich Google Stadia, shèid e m’ inntinn. Tha am beachd cho sònraichte agus cho ùr-ghnàthach is gu robh mi an-còmhnaidh a’ faighneachd ciamar a bha seo eadhon comasach leis an teicneòlas a th ’ann. Leis a’ mhiann a bhith a’ tuigsinn a’ chuspair seo nas fheàrr thug mi orm an dreach agam fhèin de gheama sgòthan stòr fosgailte a chruthachadh. Bha an toradh dìreach sgoinneil. Gu h-ìosal bu mhath leam am pròiseas obrach air mo bhliadhna a roinn pròiseict.

TLDR: dreach sleamhnag goirid le prìomh thachartasan

Carson a tha geamannan sgòthan san àm ri teachd

Tha mi a’ creidsinn gum bi Cloud Gaming a dh’ aithghearr mar an ath ghinealach de chan e a-mhàin gèamadh, ach cuideachd raointean eile de shaidheans coimpiutair. Is e gèamadh sgòthan mullach a’ mhodail teachdaiche / frithealaiche. Bidh am modail seo a ’meudachadh riaghladh backend agus a’ lughdachadh obair aghaidh le bhith a ’toirt aoigheachd do loidsig geama air frithealaiche iomallach agus a’ sruthadh ìomhaighean / claisneachd don neach-dèiligidh. Bidh an frithealaiche a’ dèanamh a’ ghiollachd throm gus nach bi an neach-dèiligidh tuilleadh fo thròcair crìochan bathar-cruaidh.

Leigidh Google Stadia leat cluich AAA geamannan (ie geamannan blockbuster àrd-ìre) air eadar-aghaidh mar YouTube. Faodar an aon dòigh-obrach a chuir an sàs ann an tagraidhean trom far-loidhne eile leithid siostam obrachaidh no dealbhadh grafaigeach 2D / 3D, msaa. gus an urrainn dhuinn an ruith gu cunbhalach air innealan le mion-chomharrachadh thar iomadh àrd-ùrlar.

Geamannan sgòthan stòr fosgailte air WebRTC: p2p, ioma-chluicheadair, neoni latency
Àm ri teachd an teicneòlais seo: Smaoinich ma ruith Microsoft Windows 10 air brabhsair Chrome?

Tha gèamadh Cloud dùbhlanach gu teicnigeach

Tha gèamadh mar aon de na raointean tearc sin far a bheil feum air freagairt luchd-cleachdaidh seasmhach, luath. Ma thachras sinn bho àm gu àm ri dàil 2 diog nuair a bhriogas tu air duilleag, gabhaidh seo ris. Tha sruthan bhidio beò buailteach a bhith a ’lagachadh beagan dhiog, ach tha iad fhathast a’ tabhann comas cleachdaidh reusanta. Ach, ma bhios an geama gu tric a’ dol sìos 500ms, tha e dìreach do-dhèanta a chluich. Is e ar n-amas latency gu math ìosal a choileanadh gus am bi a’ bheàrn eadar cuir a-steach agus meadhanan cho beag sa ghabhas. Mar sin, chan eil an dòigh thraidiseanta a thaobh sruthadh bhidio buntainneach an seo.

Geamannan sgòthan stòr fosgailte air WebRTC: p2p, ioma-chluicheadair, neoni latency
Teamplaid Gèam Coitcheann Cloud

Pròiseact stòr fosgailte CloudRetro

Cho-dhùin mi sampall deuchainn de gheama sgòthan a chruthachadh gus faicinn an robh seo comasach le cuingealachaidhean lìonra cho teann. Thagh mi Golang airson dearbhadh bun-bheachd oir b’ i an cànan air an robh mi eòlach agus bha e gu math freagarrach airson a’ bhuileachadh seo airson iomadach adhbhar eile, mar a lorg mi nas fhaide air adhart. Tha Go sìmplidh agus a 'leasachadh gu math luath; Tha seanalan ann an Go math airson a bhith a’ riaghladh ioma-snàthainn.

Am pròiseact CloudRetro.io na sheirbheis cluich sgòthan stòr fosgailte airson geamannan retro. Is e amas a’ phròiseict an t-eòlas cluichidh as comhfhurtail a thoirt do gheamannan retro traidiseanta agus ioma-chluicheadair a chuir ris.
Faodaidh tu barrachd ionnsachadh mun phròiseact an seo: https://github.com/giongto35/cloud-game.

Gnìomh CloudRetro

Bidh CloudRetro a’ cleachdadh gheamannan retro gus cumhachd geamannan sgòthan a nochdadh. A leigeas leat mòran eòlasan cluich sònraichte fhaighinn.

  • Gluasad a 'ghèam
    • Ath-chluich sa bhad nuair a dh'fhosglas tu an duilleag; chan eil feum air luchdachadh sìos no stàladh
    • Ag obair ann am brabhsair gluasadach, agus mar sin chan eil feum air bathar-bog airson a ruith

  • Faodar seiseanan geama a roinn thairis air iomadh inneal agus an stòradh san sgòth airson an ath thuras a logas tu a-steach
  • Faodar an geama a chraoladh, no faodaidh grunn luchd-cleachdaidh a chluich aig an aon àm:
    • Sluagh mar TwitchPlayPokemon, dìreach barrachd tar-àrd-ùrlar agus barrachd fìor-ùine
    • Geamannan air loidhne an-asgaidh. Faodaidh mòran luchd-cleachdaidh cluich gun a bhith a 'stèidheachadh lìonra. Faodaidh 2 chluicheadair Samurai Shodown a-nis a chluich thairis air lìonra CloudRetro

    Geamannan sgòthan stòr fosgailte air WebRTC: p2p, ioma-chluicheadair, neoni latency
    Tionndadh demo de gheama ioma-chluiche air-loidhne air diofar innealan

    Bun-structar

    Riatanasan agus stac teicneòlas

    Gu h-ìosal tha liosta de na riatanasan a shuidhich mi mus tòisich mi air a’ phròiseact.

    1. Aon chluicheadair
    Is dòcha nach eil an riatanas seo a’ coimhead ro chudromach no follaiseach an seo, ach is e seo aon de na prìomh rudan beir leat, tha e a’ leigeil le geamannan sgòthan fuireach cho fada air falbh bho sheirbheisean sruthadh traidiseanta sa ghabhas. Ma chuireas sinn fòcas air geama aon-chluicheadair, gheibh sinn cuidhteas frithealaiche meadhanaichte no CDN oir chan fheum sinn sruthadh chun t-sluaigh. An àite a bhith a’ luchdachadh suas sruthan gu frithealaiche sinc no a’ dol seachad air pacaidean gu frithealaiche WebSocket meadhanaichte, tha sruthan seirbheis air an lìbhrigeadh gu dìreach don neach-cleachdaidh tro cheangal WebRTC co-aoisean.

    2. Sruth meadhanan latency ìosal
    A’ leughadh mu Stadia, bidh mi tric a’ faicinn WebRTC air ainmeachadh ann an cuid de artaigilean. Thuig mi gur e teicneòlas air leth a th’ ann an WebRTC agus gu bheil e foirfe airson a chleachdadh ann an geamannan sgòthan. Tha WebRTC na phròiseact a bheir seachad brobhsairean lìn agus tagraidhean gluasadach le conaltradh fìor-ùine tro API sìmplidh. Tha e a’ toirt seachad ceangal co-aoisean, tha e air a bharrrachadh airson meadhanan, agus tha codecs àbhaisteach air an togail a-steach leithid VP8 agus H264.

    Thug mi prìomhachas do bhith a’ dèanamh cinnteach gu bheil an eòlas cleachdaiche as fheàrr a thaobh cumail suas grafaigean àrd-inbhe. Gabhar ri cuid de chall san algairim. Tha ceum a bharrachd aig Google Stadia ann a bhith a’ lughdachadh meud ìomhaigh air an fhrithealaiche, agus tha frèamaichean air an àrdachadh gu càileachd nas àirde mus tèid an cur gu co-aoisean.

    3. Bun-structair sgaoilte le slighe cruinn-eòlasach
    Ge bith dè cho àrd ‘s a tha an algairim teannachaidh agus còd, is e an lìonra fhathast am feart co-dhùnaidh a chuireas gu mòr ri latency. Feumaidh uidheamachd a bhith aig an ailtireachd gus am frithealaiche as fhaisge air an neach-cleachdaidh a chàradh gus ùine turas cruinn (RTT) a lughdachadh. Feumaidh co-òrdanaiche 1 a bhith aig an ailtireachd agus grunn luchd-frithealaidh sruthadh air feadh an t-saoghail: US West, US East, Europe, Singapore, China. Feumaidh a h-uile seirbheisiche sruthadh a bhith gu tur aonaranach. Faodaidh an siostam an cuairteachadh aige atharrachadh nuair a thig frithealaiche a-steach no a’ fàgail an lìonra. Mar sin, le trafaic mhòr, le bhith a’ cur frithealaichean a bharrachd a’ ceadachadh sgèileadh còmhnard.

    4. Co-chòrdalachd brabhsair
    Tha gèamadh Cloud aig a 'char as fheàrr nuair a dh' fheumas e an ìre as lugha bho luchd-cleachdaidh. Tha seo a’ ciallachadh gu bheil e comasach ruith ann am brobhsair. Bidh brobhsairean a’ cuideachadh gus an eòlas cluichidh a dhèanamh cho comhfhurtail sa ghabhas do luchd-cleachdaidh, gan sàbhaladh bho bhith a’ stàladh bathar-bog is bathar-cruaidh. Bidh brobhsairean cuideachd a’ cuideachadh le bhith a’ toirt seachad gnìomh tar-àrd-ùrlar eadar dreachan gluasadach is deasg. Gu fortanach, tha WebRTC a’ faighinn deagh thaic thar grunn bhrobhsairean.

    5. Dealachadh soilleir eadar eadar-aghaidh a 'gheama agus seirbheis
    Bidh mi a’ coimhead air an t-seirbheis cluich sgòthan mar àrd-ùrlar. Bu chòir gum biodh a h-uile duine comasach air rud sam bith a cheangal ris an àrd-ùrlar. A-nis tha mi air amalachadh LibRetro le seirbheis cluich sgòthan oir tha LibRetro a’ tabhann eadar-aghaidh emuladair geama breagha airson geamannan retro leithid SNES, GBA, PS.

    6. Seòmraichean airson ioma-chluicheadair, cluich sluagh agus ceangal a-muigh (ceangal domhainn) leis a' gheama
    Tha CloudRetro a’ toirt taic do dh’ iomadh geama ùr leithid CrowdPlay agus Online MultiPlayer airson geamannan retro. Ma dh’ fhosglas grunn luchd-cleachdaidh an aon cheangal domhainn air diofar choimpiutairean, chì iad an aon gheama a’ ruith agus bidh iad eadhon comasach air a dhol còmhla ris.

    A bharrachd air an sin, tha stàitean geama air an stòradh ann an stòradh neòil. Leigidh seo le luchd-cleachdaidh cumail orra a’ cluich aig àm sam bith air inneal sam bith eile.

    7. Sgèileadh còmhnard
    Coltach ri SAAS sam bith an-diugh, feumaidh geamannan sgòthan a bhith air an dealbhadh gus a bhith scalable gu còmhnard. Leigidh dealbhadh co-òrdanaiche dhut barrachd luchd-obrach a chuir ris gus barrachd trafaic a fhrithealadh.

    8. Gun cheangal ri aon neul
    Tha bun-structar CloudRetro air a chumail air diofar sholaraichean sgòthan (Cuan Digiteach, Alibaba, solaraiche àbhaisteach) airson diofar roinnean. Bidh mi a ’comasachadh ruith ann an soitheach Docker airson a’ bhun-structair agus a ’rèiteachadh shuidheachaidhean lìonra a’ cleachdadh sgriobt bash gus nach tèid a ghlasadh a-steach do aon sholaraiche sgòthan. Le bhith ga chur còmhla ri NAT Traversal ann an WebRTC, faodaidh sùbailteachd a bhith againn gus CloudRetro a chleachdadh air àrd-ùrlar sgòthan sam bith agus eadhon air innealan neach-cleachdaidh sam bith.

    Dealbhadh ailtireachd

    Neach-obrach: (no an t-seirbheisiche sruthadh a chaidh ainmeachadh gu h-àrd) ag iomadachadh nan geamannan, a’ ruith na loidhne-phìoban còdaidh, agus a’ sruthadh nam meadhanan còdaichte gu luchd-cleachdaidh. Tha eisimpleirean luchd-obrach air an sgaoileadh air feadh an t-saoghail, agus faodaidh gach neach-obrach seiseanan ioma-chleachdaiche a làimhseachadh aig an aon àm.

    Co-òrdanaiche: an urra ris an neach-cleachdaidh ùr a chàradh leis an neach-obrach as freagarraiche airson sruthadh. Bidh an co-òrdanaiche ag eadar-obrachadh le luchd-obrach tro WebSocket.

    Stòradh stàite geama: stòradh meadhanach iomallach airson a h-uile stàite geama. Tha an stòradh seo a’ toirt seachad gnìomhan cudromach leithid sàbhaladh/luchdachadh iomallach.

    Geamannan sgòthan stòr fosgailte air WebRTC: p2p, ioma-chluicheadair, neoni latency
    Ailtireachd àrd-ìre de CloudRetro

    Sgriobt Custom

    Nuair a dh’ fhosglas neach-cleachdaidh ùr CloudRetro ann an ceumannan 1 agus 2 a chithear san fhigear gu h-ìosal, thathar ag iarraidh air a’ cho-òrdanaiche còmhla ris an liosta de luchd-obrach a tha rim faighinn chun chiad duilleag. Às deidh seo, ann an ceum 3 bidh an neach-dèiligidh a ’tomhas na dàil airson a h-uile tagraiche a’ cleachdadh iarrtas ping HTTP. Thèid an liosta dàil seo an uairsin a chuir air ais chun cho-òrdanaiche gus an urrainn dha dearbhadh dè an neach-obrach as freagarraiche airson seirbheis a thoirt don neach-cleachdaidh. Ceum 4 gu h-ìosal a 'cruthachadh a' gheama. Tha ceangal sruthadh WebRTC air a stèidheachadh eadar an neach-cleachdaidh agus an neach-obrach ainmichte.
    Geamannan sgòthan stòr fosgailte air WebRTC: p2p, ioma-chluicheadair, neoni latency
    Sgriobt cleachdaiche às deidh dhut faighinn a-steach

    Dè tha taobh a-staigh an neach-obrach a

    Bidh pìoban geama is sruthadh air an stòradh taobh a-staigh an neach-obrach leotha fhèin agus ag iomlaid fiosrachadh an sin tron ​​​​eadar-aghaidh. An-dràsta, tha an conaltradh seo air a dhèanamh le bhith a’ gluasad dàta mar chuimhneachan tro Golang seanalan anns an aon phròiseas. Is e an ath amas sgaradh, i.e. cur air bhog neo-eisimeileach a’ gheama ann am pròiseas eile.

    Geamannan sgòthan stòr fosgailte air WebRTC: p2p, ioma-chluicheadair, neoni latency
    Eadar-obrachadh co-phàirtean luchd-obrach

    Prìomh phàirtean:

    • WebRTC: pàirt teachdaiche a ghabhas ri cuir a-steach luchd-cleachdaidh agus toraidhean meadhanan còdaichte bhon fhrithealaiche.
    • Emulator geama: co-phàirt cluiche. Taing do leabharlann Libretro, is urrainn don t-siostam an geama a ruith taobh a-staigh an aon phròiseas agus eadar-ghabhail a-staigh meadhanan agus sruth cuir a-steach.
    • Bidh frèamaichean in-gheam air an glacadh agus air an cur chun encoder.
    • Ìomhaigh / còdachadh claisneachd: loidhne-phìoban còdaidh a bheir frèamaichean mheadhanan, gan còdachadh air a’ chùl, agus a’ toirt a-mach ìomhaighean/claisneachd còdaichte.

    Реализация

    Tha CloudRetro an urra ri WebRTC mar an teicneòlas cnàimh-droma aige, agus mar sin mus deach mi a-steach don fhiosrachadh mu bhuileachadh Golang, chuir mi romham bruidhinn mu WebRTC fhèin. Is e teicneòlas iongantach a tha seo a chuidich mi gu mòr ann a bhith a’ coileanadh latency fo-diog airson dàta sruthadh.

    WebRTC

    Tha WebRTC air a dhealbhadh gus ceanglaichean àrd-inbhe eadar co-aoisean a thoirt seachad air aplacaidean gluasadach dùthchasach agus brobhsairean a’ cleachdadh APIan sìmplidh.

    NAT Traversal

    Tha WebRTC ainmeil airson a ghnìomhachd NAT Traversal. Tha WebRTC air a dhealbhadh airson conaltradh co-aoisean. Is e an t-amas aige an t-slighe dhìreach as freagarraiche a lorg, a’ seachnadh geataichean NAT agus ballachan teine ​​​​airson conaltradh le co-aoisean tro phròiseas ris an canar ICE. Mar phàirt den phròiseas seo, lorgaidh na WebRTC API an seòladh IP poblach agad a’ cleachdadh frithealaichean STUN agus cuir air adhart e chun t-seirbheisiche sealaidheachd (LAOIDH) nuair nach urrainnear ceangal dìreach a stèidheachadh.

    Ach, chan eil CloudRetro a’ dèanamh làn fheum den fheart seo. Chan eil na ceanglaichean co-aoisean aige eadar luchd-cleachdaidh, ach eadar luchd-cleachdaidh agus frithealaichean sgòthan. Tha nas lugha de chuingealachaidhean conaltraidh dìreach aig taobh frithealaiche a’ mhodail na inneal cleachdaiche àbhaisteach. Leigidh seo leat puirt a tha a’ tighinn a-steach ro-fhosgladh no seòlaidhean IP poblach a chleachdadh gu dìreach, leis nach eil am frithealaiche air cùl NAT.

    Roimhe sin, bha mi airson am pròiseact a thionndadh gu bhith na àrd-ùrlar cuairteachaidh geama airson Cloud Gaming. B’ e am beachd leigeil le luchd-cruthachaidh geama geamannan agus goireasan sruthadh a thoirt seachad. Agus bhiodh luchd-cleachdaidh ag eadar-obrachadh gu dìreach le solaraichean. San dòigh dì-mheadhanaichte seo, chan eil ann an CloudRetro ach frèam airson goireasan sruthadh treas-phàrtaidh a cheangal ri luchd-cleachdaidh, ga dhèanamh nas scalable nuair nach eil e air a chumail tuilleadh. Tha àite WebRTC NAT Traversal an seo glè chudromach gus tòiseachadh air ceangal co-aoisean gu co-aoisean air goireasan sruthadh treas-phàrtaidh, ga dhèanamh nas fhasa don neach-cruthachaidh ceangal ris an lìonra.

    Dùmhlachadh bhidio

    Tha teannachadh bhidio na phàirt riatanach den loidhne-phìoban agus a ’cur gu mòr ri sruthadh rèidh. Ged nach eil e riatanach fios a bhith agad air a h-uile mion-fhiosrachadh mu chòdachadh bhidio VP8 / H264, faodaidh tuigse a bhith agad air na bun-bheachdan do chuideachadh le bhith a’ tuigsinn roghainnean astar bhidio sruthadh, deasbaireachd giùlan ris nach robh dùil, agus latency atharrachadh.

    Tha e dùbhlanach a bhith a’ teannachadh bhidio airson seirbheis sruthadh oir feumaidh an algairim dèanamh cinnteach gu bheil an ùine còdaidh iomlan + ùine tar-chuir lìonra + ùine dì-còdaidh cho ìosal sa ghabhas. A bharrachd air an sin, feumaidh am pròiseas còdaidh a bhith cunbhalach agus leantainneach. Chan eil cuid de mhalairt-chòdachadh a’ buntainn – mar eisimpleir, chan urrainn dhuinn a bhith fàbharach dha amannan còdaidh fada thairis air meudan faidhle nas lugha agus amannan dì-chòdaidh, no a bhith a’ cleachdadh teannachadh neo-chunbhalach.

    Is e am beachd air cùl teannachadh bhidio cuir às do phìosan fiosrachaidh neo-riatanach fhad ‘s a chumas iad ìre iomchaidh de mhearachd airson luchd-cleachdaidh. A bharrachd air a bhith a’ còdachadh frèamaichean ìomhaighean statach fa leth, tha an algairim a’ toirt a-steach am frèam gnàthach bhon fheadhainn a bh’ ann roimhe agus an ath fhear, agus mar sin chan eil ach an eadar-dhealachadh aca air a chuir. Mar a chithear bhon eisimpleir le Pacman, chan eil ach puingean eadar-dhealaichte air an gluasad.

    Geamannan sgòthan stòr fosgailte air WebRTC: p2p, ioma-chluicheadair, neoni latency
    Dèan coimeas eadar frèamaichean bhidio a’ cleachdadh Pacman mar eisimpleir

    Dùmhlachadh claisneachd

    Mar an ceudna, tha an algairim teannachaidh claisneachd a’ fàgail a-mach dàta nach fhaic daoine. Is e Opus an-dràsta an codec claisneachd as fheàrr a tha a’ coileanadh. Tha e air a dhealbhadh gus tonn claisneachd a chuir thairis air protocol datagram òrdaichte leithid RTP (Pròtacal Còmhdhail Fìor-ùine). Tha an latency aige nas ìsle na mp3 agus aac, agus tha an càileachd nas àirde. Mar as trice tha an latency timcheall air 5 ~ 66,5ms.

    Pion, WebRTC ann an Golang

    Pawn na phròiseact le còd fosgailte a bheir WebRTC gu Golang. An àite an còmhdach àbhaisteach de leabharlannan dùthchasach C ++ WebRTC, tha Pion na bhuileachadh dùthchasach Golang de WebRTC le coileanadh nas fheàrr, amalachadh Go, agus smachd dreach air protocolaidhean WebRTC.

    Bidh an leabharlann cuideachd a’ comasachadh sruthadh le tòrr thogalaichean togte le latency fo-diog. Tha a bhuileachadh fhèin de STUN, DTLS, SCTP, msaa. agus cuid de dheuchainnean le QUIC agus WebAssembly. Tha an leabharlann stòr fosgailte seo fhèin na ghoireas ionnsachaidh fìor mhath le sgrìobhainnean sàr-mhath, buileachadh protocol lìonra, agus eisimpleirean fionnar.

    Tha coimhearsnachd Pion, air a stiùireadh le neach-cruthachaidh fìor dhealasach, gu math beòthail, le tòrr chòmhraidhean càileachd a 'dol air adhart mu WebRTC. Ma tha ùidh agad san teicneòlas seo, thig còmhla rinn http://pion.ly/slack - ionnsaichidh tu tòrr rudan ùra.

    A’ sgrìobhadh CloudRetro ann an Golang

    Geamannan sgòthan stòr fosgailte air WebRTC: p2p, ioma-chluicheadair, neoni latency
    Cur an gnìomh neach-obrach ann an Go

    Rach gu seanalan ann an gnìomh

    Taing do dhealbhadh seanail breagha Go, tha na duilgheadasan a thaobh sruthadh tachartais agus concurrency air an sìmplidh gu mòr. Mar a tha san dealbh, tha grunn phàirtean aig diofar GoRoutines a’ ruith aig an aon àm. Bidh gach pàirt a’ riaghladh a staid agus a’ conaltradh tro shianalan. Tha tagradh roghnach Golang a’ toirt air aon tachartas atamach a bhith air a phròiseasadh a h-uile uair sa gheama (cuir diog sa gheama). Tha seo a 'ciallachadh nach eil feum air glasadh airson an dealbhadh seo. Mar eisimpleir, nuair a shàbhalas neach-cleachdaidh, tha feum air dealbh slàn de staid a’ gheama. Bu chòir don staid seo fuireach leantainneach, logadh a-steach gus am bi an sàbhaladh deiseil. Rè gach diog geama, chan urrainn don backend ach obrachadh sàbhalaidh no cuir a-steach a làimhseachadh, a’ dèanamh an snàithlean pròiseas sàbhailte.

    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

    Tha an teamplaid Golang seo a’ freagairt air a’ chùis cleachdaidh CrowdPlay agus Multiple Player agam gu foirfe. A’ leantainn a’ phàtrain seo, tha a h-uile cuir a-steach luchd-cleachdaidh ann an aon rùm air a thogail a-steach don t-sianal inntrigidh sa mheadhan. Bidh meadhanan geama an uairsin air an cleachdadh chun a h-uile neach-cleachdaidh san aon rùm. San dòigh seo, bidh sinn a’ coileanadh roinneadh staid a’ gheama eadar grunn sheiseanan geama de luchd-cleachdaidh eadar-dhealaichte.

    Geamannan sgòthan stòr fosgailte air WebRTC: p2p, ioma-chluicheadair, neoni latency
    Sioncronadh eadar diofar sheiseanan

    Eas-bhuannachdan Golang

    Chan eil Golang foirfe. Tha an sianal slaodach. An coimeas ri bacadh, tha Go channel dìreach na dhòigh nas fhasa air tachartasan co-aontach is snàthaichte a làimhseachadh, ach chan eil sianal a’ toirt seachad an coileanadh as fheàrr. Tha loidsig bacaidh iom-fhillte fon t-sianal. Mar sin rinn mi beagan atharrachaidhean air a’ bhuileachadh, ag ath-chur ghlasan agus luachan atamach nuair a chaidh seanalan a chuir an àite gus coileanadh a bharrachadh.

    A bharrachd air an sin, chan eil an neach-cruinneachaidh sgudail ann an Golang air a riaghladh, a bhios uaireannan ag adhbhrachadh amannan amharasach fada. Tha seo gu mòr a’ cur bacadh air an tagradh sruthadh fìor-ùine.

    COG

    Bidh am pròiseact a’ cleachdadh an leabharlann stòr fosgailte Golang VP8/H264 a th’ ann mar-thà airson teannachadh nam meadhanan agus Libretro airson emuladairean geama. Chan eil anns na leabharlannan sin uile ach pasgain de leabharlann C ann an Go a’ cleachdadh COG. Tha cuid de na h-eas-bhuannachdan air an liostadh ann an am post seo le Dave Cheney. Na duilgheadasan a choinnich mi:

    • neo-chomas tubaist a ghlacadh ann an CGO, eadhon le Golang RecoveryCrash;
    • fàilligeadh air botail coileanaidh a chomharrachadh nuair nach urrainn dhuinn duilgheadasan mionaideach a lorg ann an CGO.

    co-dhùnadh

    Choilean mi an t-amas agam a bhith a’ tuigsinn seirbheisean cluich sgòthan agus a’ cruthachadh àrd-ùrlar a chuidicheas mi le bhith a’ cluich gheamannan retro cianalais le mo charaidean air-loidhne. Cha bhiodh am pròiseact seo air a bhith comasach às aonais leabharlann Pion agus taic coimhearsnachd Pion. Tha mi air leth taingeil airson a leasachadh dian. Rinn na APIan sìmplidh a thug WebRTC agus Pion seachad cinnteach gum biodh amalachadh fuaigheil. Chaidh a’ chiad dearbhadh bun-bheachd agam fhoillseachadh an aon seachdain, eadhon ged nach robh eòlas sam bith agam roimhe air conaltradh co-aoisean (P2P).

    A dh’ aindeoin cho furasta ‘s a tha e amalachadh, tha sruthadh P2P gu dearbh na raon gu math toinnte ann an saidheans coimpiutaireachd. Feumaidh i dèiligeadh ri iom-fhillteachd ailtireachd lìonra fad-ùine leithid IP agus NAT gus seisean co-aoisean a chruthachadh. Fhad ‘s a bha mi ag obair air a’ phròiseact seo, fhuair mi tòrr eòlas luachmhor mu lìonrachadh agus optimization dèanadais, agus mar sin tha mi a ’brosnachadh a h-uile duine feuchainn ri toraidhean P2P a thogail a’ cleachdadh WebRTC.

    Bidh CloudRetro a ’frithealadh air a h-uile cùis cleachdaidh ris an robh dùil agam bho mo shealladh mar chluicheadair retro. Ach, tha mi a’ smaoineachadh gu bheil mòran raointean sa phròiseact as urrainn dhomh a leasachadh, leithid an lìonra a dhèanamh nas earbsaiche agus nas gnìomhaiche, a’ toirt seachad grafaigean geama de chàileachd nas àirde, no an comas geamannan a cho-roinn eadar luchd-cleachdaidh. Tha mi ag obair cruaidh air seo. Feuch an lean thu pròiseict agus cuir taic ris ma thogras tu e.

Source: www.habr.com

Cuir beachd ann