Ṣiṣii ere awọsanma orisun lori WebRTC: p2p, elere pupọ, lairi odo

Ṣiṣii ere awọsanma orisun lori WebRTC: p2p, elere pupọ, lairi odo
Sọfitiwia bii iṣẹ kan, awọn amayederun bii iṣẹ kan, pẹpẹ bi iṣẹ kan, pẹpẹ ibaraẹnisọrọ bi iṣẹ kan, apejọ fidio bi iṣẹ kan, kini nipa ere awọsanma bi iṣẹ kan? Awọn igbiyanju pupọ ti wa tẹlẹ lati ṣẹda ere awọsanma (Awọn ere Awọsanma), gẹgẹbi Stadia, ti Google ṣe ifilọlẹ laipẹ. Stadia kii ṣe tuntun si WebRTC, ṣugbọn awọn miiran le lo WebRTC ni ọna kanna?

Thanh Nguyen pinnu lati ṣe idanwo anfani yii lori iṣẹ orisun ṣiṣi rẹ CloudRetro. CloudRetro da lori Pion, gbajumo Ile-ikawe WebRTC ti o da lori Go (o ṣeun Afihan lati ọdọ ẹgbẹ idagbasoke Pion fun iranlọwọ wọn ni ṣiṣeradi nkan yii). Ninu àpilẹkọ yii, Thanh n pese akopọ ti awọn faaji ti iṣẹ akanṣe rẹ, ati pe o tun sọrọ nipa kini awọn nkan ti o wulo ti o kọ ati awọn italaya wo ni o pade lakoko iṣẹ rẹ.

Ifihan

Ni ọdun to kọja, nigbati Google kede Stadia, o fẹ ọkan mi. Ero naa jẹ alailẹgbẹ ati imotuntun ti Mo ṣe iyalẹnu nigbagbogbo bawo ni eyi ṣe ṣee ṣe pẹlu imọ-ẹrọ to wa tẹlẹ. Ifẹ lati ni oye koko-ọrọ yii dara julọ jẹ ki n ṣẹda ẹya ti ara mi ti ere awọsanma-ìmọ. Awọn esi je nìkan ikọja. Ni isalẹ Emi yoo fẹ lati pin ilana ti ṣiṣẹ lori ọdun mi ise agbese.

TLDR: ẹya ifaworanhan kukuru pẹlu awọn ifojusi

Idi ti awọsanma ere ni ojo iwaju

Mo gbagbọ pe ere awọsanma yoo di iran atẹle ti kii ṣe ere nikan, ṣugbọn awọn agbegbe miiran ti imọ-ẹrọ kọnputa. Awọsanma ere ni awọn ṣonṣo ti awọn ose / olupin awoṣe. Awoṣe yii mu iṣakoso ẹhin pọ si ati dinku iṣẹ iwaju nipasẹ gbigbalejo ọgbọn ere lori olupin latọna jijin ati awọn aworan ṣiṣanwọle / ohun si alabara. Olupin naa ṣe sisẹ iwuwo nitoribẹẹ alabara ko si ni aanu ti awọn idiwọn ohun elo.

Google Stadia pataki jẹ ki o ṣere Awọn ere AAA (ie awọn ere blockbuster giga-giga) lori wiwo bii YouTube. Ọna kanna ni a le lo si awọn ohun elo aisinipo wuwo miiran gẹgẹbi ẹrọ ṣiṣe tabi apẹrẹ ayaworan 2D/3D, ati bẹbẹ lọ. ki a le ṣiṣe wọn nigbagbogbo lori awọn ẹrọ kekere-spec kọja awọn iru ẹrọ pupọ.

Ṣiṣii ere awọsanma orisun lori WebRTC: p2p, elere pupọ, lairi odo
Ọjọ iwaju ti imọ-ẹrọ yii: Fojuinu ti Microsoft Windows 10 ba ṣiṣẹ lori ẹrọ aṣawakiri Chrome bi?

Ere awọsanma jẹ nija imọ-ẹrọ

Ere jẹ ọkan ninu awọn agbegbe toje nibiti igbagbogbo, idahun olumulo iyara nilo. Ti o ba jẹ pe lẹẹkọọkan a ba pade idaduro iṣẹju keji 2 nigba titẹ si oju-iwe kan, eyi jẹ itẹwọgba. Awọn ṣiṣan fidio ifiwe ṣọ lati aisun kan diẹ aaya, sugbon si tun nse a reasonable lilo. Bibẹẹkọ, ti ere naa ba jẹ igbagbogbo nipasẹ 500ms, ko ṣee ṣe ni irọrun. Ibi-afẹde wa ni lati ṣaṣeyọri lairi kekere pupọ ki aafo laarin titẹ sii ati media jẹ kekere bi o ti ṣee. Nitorinaa, ọna aṣa si ṣiṣan fidio ko wulo nibi.

Ṣiṣii ere awọsanma orisun lori WebRTC: p2p, elere pupọ, lairi odo
Gbogbogbo awọsanma Game Àdàkọ

Ṣii orisun orisun CloudRetro

Mo pinnu lati ṣẹda apẹẹrẹ idanwo ti ere awọsanma lati rii boya gbogbo eyi ṣee ṣe pẹlu iru awọn ihamọ nẹtiwọọki wiwọ. Mo yan Golang fun ẹri ti imọran nitori pe o jẹ ede ti Mo mọ julọ ati pe o baamu daradara fun imuse yii fun ọpọlọpọ awọn idi miiran, bi mo ṣe rii nigbamii. Lọ ni o rọrun ati ki o ndagba ni kiakia; Awọn ikanni ni Go jẹ nla fun ṣiṣakoso multithreading.

Ise agbese na CloudRetro.io jẹ iṣẹ ere orisun awọsanma ṣiṣi fun ere retro. Ibi-afẹde ti iṣẹ akanṣe ni lati mu iriri ere ti o ni itunu julọ si awọn ere retro ti aṣa ati ṣafikun pupọ.
O le kọ ẹkọ diẹ sii nipa iṣẹ akanṣe nibi: https://github.com/giongto35/cloud-game.

CloudRetro iṣẹ

CloudRetro nlo awọn ere retro lati ṣe afihan agbara ti ere awọsanma. Eyi ti o gba ọ laaye lati gba ọpọlọpọ awọn iriri ere alailẹgbẹ.

  • Portability ti awọn ere
    • Sisisẹsẹhin lẹsẹkẹsẹ nigbati ṣiṣi oju-iwe naa; ko si download tabi fifi sori ẹrọ ti nilo
    • Ṣiṣẹ ni ẹrọ aṣawakiri alagbeka kan, nitorinaa ko nilo sọfitiwia lati ṣiṣẹ

  • Awọn akoko ere le ṣe pinpin kọja awọn ẹrọ lọpọlọpọ ati fipamọ sinu awọsanma fun igba miiran ti o wọle
  • Ere naa le jẹ ṣiṣan, tabi o le ṣere nipasẹ ọpọlọpọ awọn olumulo ni ẹẹkan:
    • Crowdplay bii TwitchPlayPokemon, nikan diẹ sii agbelebu-Syeed ati diẹ sii akoko gidi
    • Aisinipo awọn ere lori ayelujara. Ọpọlọpọ awọn olumulo le ṣere laisi eto nẹtiwọki kan. Samurai Shodown le ṣere nipasẹ awọn oṣere 2 lori nẹtiwọọki CloudRetro

    Ṣiṣii ere awọsanma orisun lori WebRTC: p2p, elere pupọ, lairi odo
    Ẹya demo ti ere elere pupọ lori ayelujara lori awọn ẹrọ oriṣiriṣi

    Amayederun

    Awọn ibeere ati akopọ imọ-ẹrọ

    Ni isalẹ ni atokọ ti awọn ibeere ti Mo ṣeto ṣaaju bẹrẹ iṣẹ naa.

    1. Ọkan player
    Ibeere yii le ma dabi pataki tabi o han gbangba nibi, ṣugbọn o jẹ ọkan ninu awọn ọna gbigbe bọtini mi, o gba ere awọsanma laaye lati duro ni jinna si awọn iṣẹ ṣiṣanwọle ibile bi o ti ṣee. Ti a ba dojukọ ere elere ẹyọkan, a le yọ kuro ninu olupin aarin tabi CDN nitori a ko ni lati sanwọle si ọpọ eniyan. Dipo kikojọpọ awọn ṣiṣan si olupin ifọwọ tabi gbigbe awọn apo-iwe si olupin WebSocket ti aarin, awọn ṣiṣan iṣẹ ti wa ni jiṣẹ taara si olumulo nipasẹ asopọ WebRTC ẹlẹgbẹ-si-ẹlẹgbẹ.

    2. Low lairi media san
    Kika nipa Stadia, Mo nigbagbogbo rii WebRTC ti mẹnuba ninu awọn nkan kan. Mo rii pe WebRTC jẹ imọ-ẹrọ to dayato ati pe o jẹ pipe fun lilo ninu ere awọsanma. WebRTC jẹ iṣẹ akanṣe ti o pese awọn aṣawakiri wẹẹbu ati awọn ohun elo alagbeka pẹlu ibaraẹnisọrọ akoko gidi nipasẹ API ti o rọrun. O pese ọna asopọ ẹlẹgbẹ-si-ẹlẹgbẹ, jẹ iṣapeye fun media, ati pe o ni awọn kodẹki boṣewa ti a ṣe sinu bii VP8 ati H264.

    Mo ṣe pataki ni idaniloju iriri olumulo ti o dara julọ ti o ṣeeṣe lori mimu awọn aworan didara ga. Diẹ ninu awọn adanu jẹ itẹwọgba ninu algorithm. Google Stadia ni igbesẹ afikun ti idinku iwọn aworan lori olupin naa, ati pe awọn fireemu ti ga soke si didara ti o ga ṣaaju gbigbe si awọn ẹlẹgbẹ.

    3. Awọn amayederun pinpin pẹlu ipa ọna agbegbe
    Laibikita bawo ni iṣapeye algorithm funmorawon ati koodu jẹ, nẹtiwọọki naa tun jẹ ipin ipinnu ti o ṣe alabapin pupọ julọ si aisimi. Awọn faaji gbọdọ ni ẹrọ kan lati ṣe alawẹ-meji olupin ti o sunmọ olumulo lati dinku akoko irin-ajo yika (RTT). Awọn faaji gbọdọ ni olutọju 1 ati ọpọlọpọ awọn olupin ṣiṣan kaakiri agbaye: US West, US East, Europe, Singapore, China. Gbogbo awọn olupin ṣiṣanwọle gbọdọ wa ni sọtọ patapata. Awọn eto le ṣatunṣe awọn oniwe-pinpin nigbati a olupin da tabi fi awọn nẹtiwọki. Nitorinaa, pẹlu ijabọ nla, fifi awọn olupin afikun laaye fun iwọn petele.

    4. Browser ibamu
    Ere awọsanma wa ni ti o dara julọ nigbati o nilo o kere julọ lati ọdọ awọn olumulo. Eyi tumọ si pe o ṣee ṣe lati ṣiṣẹ ni ẹrọ aṣawakiri kan. Awọn aṣawakiri ṣe iranlọwọ lati jẹ ki iriri ere ni itunu bi o ti ṣee fun awọn olumulo, fifipamọ wọn lati fifi sọfitiwia ati hardware sori ẹrọ. Awọn aṣawakiri tun ṣe iranlọwọ lati pese iṣẹ ṣiṣe agbekọja laarin alagbeka ati awọn ẹya tabili tabili. Ni Oriire, WebRTC ni atilẹyin daradara kọja ọpọlọpọ awọn aṣawakiri.

    5. Ko Iyapa ti awọn ere ni wiwo ati iṣẹ
    Mo wo iṣẹ ere awọsanma bi pẹpẹ kan. Gbogbo eniyan yẹ ki o ni anfani lati sopọ ohunkohun si pẹpẹ. Bayi Mo ti ṣepọ LibRetro pẹlu iṣẹ ere awọsanma nitori LibRetro nfunni ni wiwo emulator ere ẹlẹwa fun awọn ere retro bii SNES, GBA, PS.

    6. Awọn yara fun multiplayer, enia play ati ita sisopo (jin-ọna asopọ) pẹlu awọn ere
    CloudRetro ṣe atilẹyin ọpọlọpọ awọn imuṣere ori kọmputa tuntun bii CrowdPlay ati Online MultiPlayer fun awọn ere retro. Ti ọpọlọpọ awọn olumulo ba ṣii ọna asopọ jinlẹ kanna lori awọn kọnputa oriṣiriṣi, wọn yoo rii ere ti nṣiṣẹ kanna ati paapaa yoo ni anfani lati darapọ mọ.

    Pẹlupẹlu, awọn ipinlẹ ere ti wa ni ipamọ ni ibi ipamọ awọsanma. Eyi n gba awọn olumulo laaye lati tẹsiwaju ere nigbakugba lori ẹrọ miiran.

    7. Petele igbelosoke
    Bii eyikeyi SAAS ni ode oni, ere awọsanma gbọdọ jẹ apẹrẹ lati jẹ iwọn ti nâa. Apẹrẹ oluṣeto-iṣẹ gba ọ laaye lati ṣafikun awọn oṣiṣẹ diẹ sii lati ṣe iranṣẹ ijabọ diẹ sii.

    8. Ko si asopọ si ọkan awọsanma
    Awọn amayederun CloudRetro ti gbalejo lori oriṣiriṣi awọn olupese awọsanma (Digital Ocean, Alibaba, olupese aṣa) fun awọn agbegbe oriṣiriṣi. Mo jẹ ki nṣiṣẹ ni apoti Docker fun awọn amayederun ati tunto awọn eto nẹtiwọki nipa lilo iwe afọwọkọ bash lati yago fun titiipa sinu olupese awọsanma kan. Nipa apapọ eyi pẹlu NAT Traversal ni WebRTC, a le ni irọrun lati ran CloudRetro sori iru ẹrọ awọsanma eyikeyi ati paapaa lori awọn ẹrọ olumulo eyikeyi.

    Apẹrẹ ayaworan

    Osise: (tabi olupin ṣiṣanwọle ti a mẹnuba loke) ṣe isodipupo awọn ere, nṣiṣẹ opo gigun ti epo, ati ṣiṣan media ti a fi koodu si awọn olumulo. Awọn iṣẹlẹ oṣiṣẹ ti pin kaakiri agbaye, ati pe oṣiṣẹ kọọkan le mu awọn akoko olumulo lọpọlọpọ ni nigbakannaa.

    Alakoso: jẹ iduro fun sisopọ olumulo tuntun pẹlu oṣiṣẹ to dara julọ fun ṣiṣanwọle. Alakoso ṣe ajọṣepọ pẹlu awọn oṣiṣẹ nipasẹ WebSocket.

    Ibi ipamọ ipo ere: aringbungbun latọna ipamọ fun gbogbo game ipinle. Ibi ipamọ yii n pese awọn iṣẹ pataki gẹgẹbi fifipamọ / fifuye latọna jijin.

    Ṣiṣii ere awọsanma orisun lori WebRTC: p2p, elere pupọ, lairi odo
    Eto faaji ipele giga ti CloudRetro

    Aṣa akosile

    Nigbati olumulo tuntun ba ṣii CloudRetro ni awọn igbesẹ 1 ati 2 ti o han ni nọmba ni isalẹ, oluṣeto pẹlu atokọ ti awọn oṣiṣẹ ti o wa ni a beere si oju-iwe akọkọ. Lẹhin eyi, ni igbesẹ 3 alabara ṣe iṣiro awọn idaduro fun gbogbo awọn oludije ni lilo ibeere ping HTTP kan. Atokọ awọn idaduro yii ni a firanṣẹ pada si olutọju naa ki o le pinnu oṣiṣẹ ti o dara julọ lati ṣe iranṣẹ fun olumulo naa. Igbesẹ 4 ni isalẹ ṣẹda ere naa. Asopọmọra ṣiṣanwọle WebRTC ti wa ni idasilẹ laarin olumulo ati oṣiṣẹ ti a yàn.
    Ṣiṣii ere awọsanma orisun lori WebRTC: p2p, elere pupọ, lairi odo
    Iwe afọwọkọ olumulo lẹhin nini wiwọle

    Kini inu oṣiṣẹ

    Ere ati ṣiṣan ṣiṣan ti wa ni ipamọ inu oṣiṣẹ ni ipinya ati paṣipaarọ alaye nibẹ nipasẹ wiwo. Lọwọlọwọ, ibaraẹnisọrọ yii ni a ṣe nipasẹ gbigbe data sinu iranti nipasẹ Golang awọn ikanni ninu ilana kanna. Ibi-afẹde ti o tẹle ni ipinya, i.e. ominira ifilole ti awọn ere ni miran ilana.

    Ṣiṣii ere awọsanma orisun lori WebRTC: p2p, elere pupọ, lairi odo
    Ibaraenisepo ti Osise irinše

    Main irinše:

    • WebRTC: paati alabara ti o gba igbewọle olumulo ati ṣe agbejade media kooduopo lati olupin naa.
    • Apeere ere: ere paati. Ṣeun si ile-ikawe Libretro, eto naa ni anfani lati ṣiṣe ere naa inu ilana kanna ati kikọlu inu inu ati ṣiṣan titẹ sii.
    • Awọn fireemu inu ere ti wa ni igbasilẹ ati firanṣẹ si kooduopo.
    • Aworan/Ayipada ohun: opo gigun ti epo ti o gba awọn fireemu media, fifi koodu pamọ ni abẹlẹ, ti o si gbejade awọn aworan/ohun ti a fi koodu sii.

    Imuse

    CloudRetro da lori WebRTC gẹgẹbi imọ-ẹrọ ẹhin rẹ, nitorinaa ṣaaju ki o to omiwẹ sinu awọn alaye ti imuse Golang, Mo pinnu lati sọrọ nipa WebRTC funrararẹ. Eyi jẹ imọ-ẹrọ iyalẹnu ti o ti ṣe iranlọwọ fun mi lọpọlọpọ ni iyọrisi airi iha keji fun data ṣiṣanwọle.

    WebRTC

    WebRTC jẹ apẹrẹ lati pese awọn asopọ ẹlẹgbẹ-si-ẹlẹgbẹ didara giga lori awọn ohun elo alagbeka abinibi ati awọn aṣawakiri ni lilo awọn API ti o rọrun.

    NAT Traversal

    WebRTC ni a mọ fun iṣẹ NAT Traversal rẹ. WebRTC jẹ apẹrẹ fun ibaraẹnisọrọ ẹlẹgbẹ-si-ẹlẹgbẹ. Ibi-afẹde rẹ ni lati wa ọna taara ti o dara julọ, yago fun awọn ẹnu-ọna NAT ati awọn ogiriina fun ibaraẹnisọrọ ẹlẹgbẹ-si-ẹlẹgbẹ nipasẹ ilana ti a pe yinyin. Gẹgẹbi apakan ti ilana yii, WebRTC APIs wa adiresi IP ti gbogbo eniyan rẹ nipa lilo awọn olupin STUN ati firanṣẹ siwaju si olupin yii (TAN) nigbati asopọ taara ko le fi idi mulẹ.

    Sibẹsibẹ, CloudRetro ko lo ẹya ara ẹrọ yii ni kikun. Awọn isopọ ẹlẹgbẹ-si-ẹlẹgbẹ rẹ ko si laarin awọn olumulo, ṣugbọn laarin awọn olumulo ati awọn olupin awọsanma. Ẹgbẹ olupin ti awoṣe naa ni awọn ihamọ ibaraẹnisọrọ taara diẹ ju ẹrọ olumulo aṣoju lọ. Eyi n gba ọ laaye lati ṣaju ṣiṣi awọn ebute oko oju omi ti nwọle tabi lo awọn adirẹsi IP ti gbogbo eniyan taara, nitori olupin ko wa lẹhin NAT.

    Ni iṣaaju, Mo fẹ lati yi iṣẹ akanṣe naa pada si pẹpẹ pinpin ere fun Awọn ere Awọsanma. Ero naa ni lati gba awọn olupilẹṣẹ ere laaye lati pese awọn ere ati awọn orisun ṣiṣanwọle. Ati awọn olumulo yoo ṣe ajọṣepọ pẹlu awọn olupese taara. Ni ọna isọdọtun yii, CloudRetro jẹ ilana kan fun sisopọ awọn orisun ṣiṣan ẹnikẹta si awọn olumulo, jẹ ki o ni iwọn diẹ sii nigbati ko ba gbalejo mọ. Ipa ti WebRTC NAT Traversal nibi jẹ pataki pupọ lati dẹrọ ibẹrẹ asopọ ẹlẹgbẹ-si-ẹlẹgbẹ lori awọn orisun ṣiṣanwọle ẹni-kẹta, jẹ ki o rọrun fun ẹlẹda lati sopọ si nẹtiwọọki.

    Fidio funmorawon

    Fidio funmorawon jẹ apakan ti ko ṣe pataki ti opo gigun ti epo ati pe o ṣe alabapin pupọ si ṣiṣan didan. Lakoko ti ko ṣe pataki lati mọ gbogbo alaye ti fifi koodu fidio VP8/H264, agbọye awọn imọran le ṣe iranlọwọ fun ọ lati loye awọn aṣayan iyara fidio ṣiṣanwọle, ṣatunṣe ihuwasi airotẹlẹ, ati ṣatunṣe lairi.

    Fidio titẹ fun iṣẹ ṣiṣanwọle jẹ nija nitori algorithm gbọdọ rii daju pe lapapọ akoko fifi koodu + akoko gbigbe nẹtiwọọki + akoko iyipada jẹ kekere bi o ti ṣee. Ni afikun, ilana ifaminsi gbọdọ jẹ deede ati tẹsiwaju. Diẹ ninu awọn iṣowo fifi ẹnọ kọ nkan ṣe—fun apẹẹrẹ, a ko le ṣe ojurere awọn akoko fifi ẹnọ kọ nkan gigun lori awọn iwọn faili kekere ati awọn akoko iyipada, tabi lo funmorawon aisedede.

    Ero ti o wa lẹhin funmorawon fidio ni lati yọkuro awọn alaye ti ko wulo lakoko titọju ipele itẹwọgba ti deede fun awọn olumulo. Ni afikun si fifi koodu si awọn fireemu aworan aimi kọọkan, algorithm ṣe afihan fireemu lọwọlọwọ lati iṣaaju ati awọn atẹle, nitorinaa iyatọ wọn nikan ni a firanṣẹ. Gẹgẹbi a ti le rii lati apẹẹrẹ pẹlu Pacman, awọn aaye iyatọ nikan ni a gbejade.

    Ṣiṣii ere awọsanma orisun lori WebRTC: p2p, elere pupọ, lairi odo
    Ifiwera awọn fireemu fidio nipa lilo Pacman bi apẹẹrẹ

    Audio funmorawon

    Bakanna, algorithm funmorawon ohun afetigbọ data ti ko le ṣe akiyesi nipasẹ eniyan. Lọwọlọwọ Opus jẹ kodẹki ohun afetigbọ ti o dara julọ. O ti ṣe apẹrẹ lati ṣe atagba igbi ohun lori ilana datagram ti o paṣẹ gẹgẹbi RTP (Ilana Gbigbe Akoko Gidi). Lairi rẹ kere ju mp3 ati aac, ati pe didara ga julọ. Lairi jẹ nigbagbogbo ni ayika 5 ~ 66,5ms.

    Pion, WebRTC ni Golang

    Pawn jẹ iṣẹ akanṣe orisun ṣiṣi ti o mu WebRTC wa si Golang. Dipo fifisilẹ deede ti awọn ile-ikawe C ++ WebRTC abinibi, Pion jẹ imuse Golang abinibi ti WebRTC pẹlu iṣẹ ṣiṣe to dara julọ, iṣọpọ Go, ati iṣakoso ẹya lori awọn ilana WebRTC.

    Ile-ikawe naa tun ngbanilaaye ṣiṣanwọle pẹlu ọpọlọpọ awọn itumọ-itumọ nla pẹlu lairi-keji. O ni imuse tirẹ ti STUN, DTLS, SCTP, ati bẹbẹ lọ. ati diẹ ninu awọn adanwo pẹlu QUIC ati WebAssembly. Ile-ikawe orisun ṣiṣi funrararẹ jẹ orisun ẹkọ ti o dara gaan pẹlu iwe ti o dara julọ, awọn imuse ilana nẹtiwọọki, ati awọn apẹẹrẹ itunu.

    Agbegbe Pion, ti o dari nipasẹ ẹlẹda ti o ni itara pupọ, jẹ iwunlere pupọ, pẹlu ọpọlọpọ awọn ijiroro didara ti n lọ nipa WebRTC. Ti o ba nifẹ si imọ-ẹrọ yii, darapọ mọ http://pion.ly/slack - iwọ yoo kọ ọpọlọpọ awọn nkan tuntun.

    Kikọ CloudRetro ni Golang

    Ṣiṣii ere awọsanma orisun lori WebRTC: p2p, elere pupọ, lairi odo
    Imuse ti a Osise ni Go

    Lọ Awọn ikanni ni Iṣe

    Ṣeun si apẹrẹ ikanni ẹlẹwa Go, awọn iṣoro ti ṣiṣan iṣẹlẹ ati ibaraenisọrọ jẹ irọrun pupọ. Gẹgẹbi ninu aworan atọka, GoRoutines oriṣiriṣi ni awọn paati pupọ ti nṣiṣẹ ni afiwe. Apakan kọọkan n ṣakoso ipinlẹ rẹ ati ibaraẹnisọrọ nipasẹ awọn ikanni. Idaniloju yiyan Golang fi agbara mu iṣẹlẹ atomiki kan lati ṣe ilana ni gbogbo igba ninu ere (ami ere). Eyi tumọ si pe ko nilo titiipa fun apẹrẹ yii. Fun apẹẹrẹ, nigbati olumulo ba fipamọ, aworan ni kikun ti ipo ere ni a nilo. Ipo yii yẹ ki o wa lemọlemọfún, wọle titi fifipamọ yoo pari. Lakoko ami ere kọọkan, ẹhin ẹhin le mu fifipamọ tabi iṣẹ titẹ sii nikan, ṣiṣe okun ilana lailewu.

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

    Àìpẹ-ni / Àìpẹ-jade

    Awoṣe Golang yii baamu CrowdPlay mi ati ọran lilo Ẹrọ Pupọ ni pipe. Ni atẹle ilana yii, gbogbo awọn igbewọle olumulo ninu yara kan ni a kọ sinu ikanni ẹnu-ọna aarin. Media ere lẹhinna gbe lọ si gbogbo awọn olumulo ni yara kanna. Ni ọna yii, a ṣe aṣeyọri pipin ti ipo ere laarin ọpọlọpọ awọn akoko ere ti awọn olumulo oriṣiriṣi.

    Ṣiṣii ere awọsanma orisun lori WebRTC: p2p, elere pupọ, lairi odo
    Amuṣiṣẹpọ laarin awọn oriṣiriṣi awọn akoko

    Awọn alailanfani ti Golang

    Golang ko pe. Awọn ikanni ni o lọra. Ti a ṣe afiwe si idinamọ, ikanni Go jẹ ọna ti o rọrun lati ṣakoso nigbakanna ati awọn iṣẹlẹ asapo, ṣugbọn ikanni ko pese iṣẹ ṣiṣe to dara julọ. Imọ idinamọ eka wa labẹ ikanni naa. Nitorinaa Mo ṣe diẹ ninu awọn atunṣe si imuse, awọn titiipa atunṣe ati awọn iye atomiki nigbati o rọpo awọn ikanni lati mu iṣẹ ṣiṣe dara si.

    Ni afikun, agbasọ idoti ni Golang ko ṣakoso, eyiti o ma fa ifura ni igba diẹ. Eyi ṣe idiwọ pupọ pẹlu ohun elo ṣiṣanwọle akoko gidi.

    COG

    Ise agbese na nlo orisun ṣiṣi ti Golang VP8/H264 ile-ikawe fun funmorawon media ati Libretro fun awọn emulators ere. Gbogbo awọn ile-ikawe wọnyi jẹ irọrun ti ile-ikawe C ni Go ni lilo COG. Diẹ ninu awọn alailanfani ti wa ni akojọ si ifiweranṣẹ yii nipasẹ Dave Cheney. Awọn iṣoro ti Mo pade:

    • ailagbara lati yẹ jamba ni CGO, paapaa pẹlu Golang RecoveryCrash;
    • ikuna lati ṣe idanimọ awọn igo iṣẹ nigba ti a ko le rii awọn iṣoro alaye ni CGO.

    ipari

    Mo ṣaṣeyọri ibi-afẹde mi ti oye awọn iṣẹ ere awọsanma ati ṣiṣẹda pẹpẹ kan ti o ṣe iranlọwọ fun mi lati ṣe awọn ere retro nostalgic pẹlu awọn ọrẹ mi lori ayelujara. Iṣẹ akanṣe yii kii yoo ṣeeṣe laisi ile-ikawe Pion ati atilẹyin agbegbe Pion. Mo dupẹ lọwọ pupọ fun idagbasoke aladanla rẹ. Awọn API ti o rọrun ti a pese nipasẹ WebRTC ati Pion ṣe idaniloju isọpọ ailopin. Ẹri akọkọ mi ti imọran ni a tu silẹ ni ọsẹ kanna, botilẹjẹpe Emi ko ni imọ iṣaaju ti ibaraẹnisọrọ ẹlẹgbẹ-si-ẹlẹgbẹ (P2P).

    Pelu irọrun ti iṣọpọ, ṣiṣanwọle P2P jẹ nitootọ agbegbe eka pupọ ni imọ-ẹrọ kọnputa. O ni lati koju pẹlu idiju ti awọn ile-iṣẹ nẹtiwọọki igba pipẹ bii IP ati NAT lati ṣẹda igba ẹlẹgbẹ-si-ẹlẹgbẹ. Lakoko ti o n ṣiṣẹ lori iṣẹ akanṣe yii, Mo ni oye pupọ ti o niyelori nipa nẹtiwọọki ati iṣapeye iṣẹ, nitorinaa Mo gba gbogbo eniyan niyanju lati gbiyanju kikọ awọn ọja P2P nipa lilo WebRTC.

    CloudRetro ṣaajo si gbogbo awọn ọran lilo ti Mo nireti lati irisi mi bi elere retro. Sibẹsibẹ, Mo ro pe ọpọlọpọ awọn agbegbe wa ninu iṣẹ akanṣe ti MO le ni ilọsiwaju, bii ṣiṣe nẹtiwọọki diẹ sii ni igbẹkẹle ati iṣẹ ṣiṣe, pese awọn aworan ere ti o ga julọ, tabi agbara lati pin awọn ere laarin awọn olumulo. Mo n ṣiṣẹ takuntakun lori eyi. Jọwọ tẹle ise agbese ati atilẹyin ti o ba ti o ba fẹ.

orisun: www.habr.com

Fi ọrọìwòye kun