Open source cloud gaming sa WebRTC: p2p, multiplayer, zero latency

Open source cloud gaming sa WebRTC: p2p, multiplayer, zero latency
Software isip Serbisyo, Imprastraktura isip Serbisyo, Platform isip Serbisyo, Platform sa Komunikasyon isip Serbisyo, Video Conferencing isip Serbisyo, ug unsa man ang Cloud Gaming isip Serbisyo? Daghan na ang mga pagsulay sa paghimo sa cloud gaming (Cloud Gaming), sama sa Stadia, bag-o lang gilusad sa Google. Stadia dili bag-o sa WebRTC, apan mahimo bang magamit sa uban ang WebRTC sa parehas nga paagi?

Nakahukom si Thanh Nguyen nga sulayan kini nga posibilidad sa iyang open source nga proyekto nga CloudRetro. Ang CloudRetro gibase sa Pion, sikat WebRTC library base sa Go (salamat Shownu gikan sa Pion development team alang sa ilang tabang niini nga artikulo). Niini nga artikulo, si Thanh naghatag usa ka kinatibuk-ang panan-aw sa arkitektura sa iyang proyekto, ug naghisgot usab bahin sa kung unsa ang iyang nakat-unan nga mapuslanon ug kung unsang mga hagit ang iyang nasugatan samtang nagtrabaho.

entry

Sa miaging tuig, sa dihang gipahibalo sa Google ang Stadia, nahingangha ako. Talagsaon ug bag-o ang ideya nga kanunay akong naghunahuna kung giunsa kini posible sa naglungtad nga teknolohiya. Ang tinguha nga mas masabtan kini nga hilisgutan nag-aghat kanako sa paghimo sa akong kaugalingon nga bersyon sa usa ka open source cloud game. Nindot kaayo ang resulta. Sa ubos gusto nakong ipaambit ang proseso sa pagtrabaho sa akong tinuig proyekto.

TLDR: mubo nga bersyon sa slide nga adunay mga highlight

Ngano nga ang cloud gaming mao ang umaabot

Nagtuo ko nga ang Cloud Gaming sa dili madugay mahimong usa ka bag-ong henerasyon nga dili lamang mga dula, apan usab sa ubang mga bahin sa syensya sa kompyuter. Ang cloud gaming mao ang kinapungkayan sa modelo sa kliyente/server. Kini nga modelo nagpadako sa pagdumala sa backend ug nagpamenos sa frontend nga trabaho pinaagi sa pag-host sa lohika sa dula sa usa ka hilit nga server ug pag-streaming sa mga imahe/audio sa kliyente. Ang server naghimo sa bug-at nga pagproseso aron ang kliyente dili na ubos sa mga limitasyon sa hardware.

Gitugotan ka sa Google Stadia nga magdula Mga dula sa AAA (i.e. high-end blockbuster nga mga dula) sa interface sama sa YouTube. Ang parehas nga pamaagi mahimong magamit sa ubang bug-at nga aplikasyon sa offline sama sa operating system o 2D/3D nga laraw sa grapiko ug uban pa. aron mapadagan namo kini nga lig-on sa mga low-spec device sa mga plataporma.

Open source cloud gaming sa WebRTC: p2p, multiplayer, zero latency
Ang kaugmaon niini nga teknolohiya: hunahunaa kung ang Microsoft Windows 10 midagan sa Chrome browser?

Ang pagdula sa cloud lisud sa teknikal

Ang dula mao ang usa sa mga talagsaon nga mga lugar diin ang usa ka kanunay nga paspas nga reaksyon sa tiggamit gikinahanglan. Kung usahay makasugat kami ug paglangan sa 2 segundos sa pag-klik sa usa ka panid, kini madawat. Ang mga live stream sa video lagmit nga pila ka segundo sa ulahi, apan nagtanyag gihapon usa ka patas nga kantidad sa usability. Bisan pa, kung ang dula kanunay nga nalangan sa 500ms, dili gyud posible nga magdula. Ang among tumong mao ang pagkab-ot sa hilabihan ka ubos nga latency aron ang gintang tali sa input ug media gamay ra kutob sa mahimo. Busa, ang tradisyonal nga pamaagi sa streaming nga video dili magamit dinhi.

Open source cloud gaming sa WebRTC: p2p, multiplayer, zero latency
Kinatibuk-ang template sa dula sa panganod

Open source nga proyekto CloudRetro

Nakahukom ko nga maghimo usa ka sample sa pagsulay sa usa ka dula sa panganod aron mahibal-an kung posible ba ang tanan sa ingon nga grabe nga mga pagdili sa network. Gipili nako ang Golang alang sa pruweba sa konsepto tungod kay kini ang lengguwahe nga akong nahibal-an ug maayo alang niini nga pagpatuman sa daghang uban pang mga hinungdan, ingon sa akong nahibal-an sa ulahi. Ang Go kay yano ug dali kaayong molambo; Ang mga channel sa Go maayo alang sa pagdumala sa multithreading.

Ang proyekto CloudRetro.io usa ka open source cloud gaming service alang sa retro gaming. Ang tumong sa proyekto mao ang pagdala sa labing komportable nga kasinatian sa pagdula ngadto sa tradisyonal nga retro nga mga dula ug pagdugang sa multiplayer.
Mahibal-an nimo ang dugang bahin sa proyekto dinhi: https://github.com/giongto35/cloud-game.

Pag-andar sa CloudRetro

Gigamit sa CloudRetro ang mga retro nga dula aron ipakita ang gahum sa pagdula sa panganod. Kana nagtugot kanimo nga makakuha daghang talagsaon nga mga kasinatian sa pagdula.

  • Game Portability
    • Diha-diha nga playback sa dihang mag-abli sa usa ka panid; walay download ug instalar nga gikinahanglan
    • Nagdagan sa usa ka mobile browser aron wala’y software nga gikinahanglan aron makadagan

  • Ang mga sesyon sa dula mahimong ipaambit sa daghang mga aparato ug itago sa panganod alang sa sunod nga pag-login
  • Ang dula mahimong ma-stream, o mahimo nimo kini nga dulaon sa daghang mga tiggamit sa usa ka higayon:
    • Crowdplay sama sa TwitchPlayPokemon, mas daghang cross-platform ug mas real-time
    • Mga dula nga offline online. Daghang tiggamit ang makadula nga walay network setup. Ang Samurai Shodown mahimo nang dulaon sa 2 ka magdudula sa CloudRetro network

    Open source cloud gaming sa WebRTC: p2p, multiplayer, zero latency
    Demo nga bersyon sa online Multiplayer nga dula sa lainlaing mga aparato

    Infrastructure

    Mga kinahanglanon ug teknolohiya stack

    Sa ubos usa ka lista sa mga kinahanglanon nga akong gitakda sa wala pa magsugod ang proyekto.

    1. Usa ka magdudula
    Kini nga kinahanglanon mahimo’g dili ingon ka hinungdanon ug klaro dinhi, apan kini usa sa akong hinungdanon nga pagkuha, gipadayon niini ang pagdula sa panganod nga layo sa tradisyonal nga mga serbisyo sa streaming kutob sa mahimo. Kung mag-focus ta sa single player game, matangtang nato ang centralized server o CDN kay dili na kinahanglan nga mag-stream sa masa. Imbis nga mag-upload og mga sapa ngadto sa usa ka ingesting server o pagpasa sa mga packet ngadto sa usa ka sentralisadong WebSocket server, ang mga service stream direktang gi-stream ngadto sa user pinaagi sa WebRTC peer connection.

    2. Ubos nga latency media stream
    Sa pagbasa bahin sa Stadia, kanunay nakong makita ang WebRTC nga gihisgutan sa pipila ka mga artikulo. Nakaamgo ko nga ang WebRTC usa ka talagsaon nga teknolohiya, ug kini maayo nga gamiton sa cloud gaming. Ang WebRTC usa ka proyekto nga naghatag sa mga web browser ug mobile application nga adunay real-time nga komunikasyon pinaagi sa usa ka yano nga API. Naghatag kini og koneksyon sa peer-to-peer, gi-optimize alang sa media, ug adunay mga built-in nga standard codec sama sa VP8 ug H264.

    Giuna nako ang paghatag sa labing kaayo nga posible nga kasinatian sa gumagamit kaysa sa pagpadayon sa taas nga kalidad nga mga graphic. Ang pipila ka mga pagkawala gitugotan sa algorithm. Ang Google Stadia adunay dugang nga lakang aron makunhuran ang gidak-on sa imahe sa server ug ang mga frame gipataas sa mas taas nga kalidad sa wala pa ipasa sa mga kaedad.

    3. Giapod-apod nga imprastraktura nga adunay geographic nga ruta
    Dili igsapayan kung unsa ka na-optimize ang compression algorithm ug code, ang network mao gihapon ang hinungdan nga hinungdan nga labing nakatampo sa latency. Ang arkitektura kinahanglan adunay usa ka mekanismo alang sa pagpares sa server nga labing duol sa user aron makunhuran ang round-trip time (RTT). Ang arkitektura kinahanglan adunay 1 coordinator ug daghang mga streaming server nga giapod-apod sa tibuuk kalibutan: US West, US East, Europe, Singapore, China. Ang tanan nga streaming server kinahanglan nga hingpit nga ihimulag. Mahimong i-adjust sa sistema ang pag-apod-apod niini kung ang server moapil o mobiya sa network. Sa ingon, sa taas nga trapiko, ang pagdugang dugang nga mga server nagtugot alang sa pinahigda nga pag-scale.

    4. Pagkaangay sa browser
    Ang pagdula sa Cloud mao ang labing kaayo kung kini nanginahanglan labing gamay gikan sa mga tiggamit. Kini nagpasabot nga posible nga modagan sa browser. Ang mga browser makatabang sa paghimo sa kasinatian sa pagdula nga komportable kutob sa mahimo alang sa mga tiggamit pinaagi sa pagluwas kanila gikan sa pag-instalar sa software ug hardware. Ang mga browser makatabang usab sa paghatag og cross-platform alang sa mga bersyon sa mobile ug desktop. Maayo na lang, ang WebRTC maayo nga gisuportahan sa lainlaing mga browser.

    5. Tin-aw nga pagbulag sa interface sa dula ug serbisyo
    Gitan-aw nako ang serbisyo sa pagdula sa cloud isip usa ka plataporma. Ang tanan kinahanglan nga makahimo sa pagkonektar sa bisan unsa sa plataporma. Gi-integrate na nako LibRetro uban ang cloud game service tungod kay ang LibRetro nagtanyag ug nindot nga game emulator interface para sa retro nga mga dula sama sa SNES, GBA, PS.

    6. Mga lawak alang sa multiplayer, crowd play ug external linking (deep-link) sa dula
    Gisuportahan sa CloudRetro ang daghang bag-ong mga dula sama sa CrowdPlay ug Online MultiPlayer alang sa mga retro nga dula. Kung daghang mga tiggamit ang mag-abli sa parehas nga lawom nga link sa lainlaing mga kompyuter, makita nila ang parehas nga dula nga nagdagan ug mahimo pa nga makaapil niini.

    Dugang pa, ang mga estado sa dula gitipigan sa pagtipig sa panganod. Gitugotan niini ang mga tiggamit nga magpadayon sa pagdula bisan unsang oras sa bisan unsang ubang aparato.

    7. Horizontal scaling
    Sama sa bisan unsang SAAS karon, ang pagdula sa panganod kinahanglan nga gidisenyo aron mahimong mabag-o nga pahalang. Ang disenyo sa coordinator-worker nagtugot kanimo sa pagdugang sa daghang mga trabahante aron makaalagad sa daghang trapiko.

    8. Wala gihigot sa usa ka panganod
    Ang CloudRetro nga imprastraktura gi-host sa lain-laing mga cloud providers (Digital Ocean, Alibaba, custom provider) alang sa lain-laing mga rehiyon. Gitugotan nako ang pagdagan sa usa ka sudlanan sa Docker sa imprastraktura ug gi-configure ang mga setting sa network gamit ang usa ka script sa bash aron malikayan nga magsalig sa usa ka tighatag sa panganod. Sa pagkombinar niini sa NAT Traversal sa WebRTC, mahimo namong adunay pagka-flexible sa pag-deploy sa CloudRetro sa bisan unsang cloud platform ug bisan sa bisan unsang makina sa user.

    Disenyo sa arkitektura

    Trabaho: (o ang streaming server nga gihisgotan sa ibabaw) nagpadaghan sa mga dula, nagpadagan sa encoding pipeline, ug nag-stream sa na-encode nga media ngadto sa mga tiggamit. Ang mga instance sa trabahante gipang-apud-apod sa tibuok kalibutan, ug ang matag trabahante makahimo sa pagdumala sa daghang mga sesyon sa user sa samang higayon.

    Coordinator: mao ang responsable sa pagpares sa bag-ong user sa labing angay nga streaming worker. Ang coordinator nakigsulti sa mga trabahante pinaagi sa WebSocket.

    Pagtipig sa estado sa dula: sentral nga hilit nga pagtipig alang sa tanan nga mga estado sa dula. Kini nga storage naghatag ug importante nga mga feature sama sa remote save/load.

    Open source cloud gaming sa WebRTC: p2p, multiplayer, zero latency
    CloudRetro taas nga lebel nga arkitektura

    Custom nga Script

    Kung giablihan sa bag-ong user ang CloudRetro sa mga lakang 1 ug 2 nga gipakita sa numero sa ubos, ang coordinator, kauban ang usa ka lista sa magamit nga mga trabahante, gihangyo sa una nga panid. Pagkahuman niana, sa lakang 3, gikalkula sa kliyente ang mga paglangan alang sa tanan nga mga kandidato gamit ang usa ka hangyo sa HTTP ping. Kini nga lista sa mga paglangan ipadala balik sa coordinator aron iyang matino ang labing angay nga trabahante nga moalagad sa tiggamit. Ang lakang 4 sa ubos maghimo usa ka dula. Ang WebRTC streaming nga koneksyon gihimo tali sa user ug sa gi-assign nga trabahante.
    Open source cloud gaming sa WebRTC: p2p, multiplayer, zero latency
    Pasadya nga script pagkahuman nakakuha og access

    Unsa ang sulod sa trabahante

    Ang mga pipeline sa dula ug streaming gitipigan sa sulod sa trabahante nga nag-inusara ug nagbinayloay og kasayuran didto pinaagi sa interface. Sa pagkakaron, kini nga komunikasyon gihimo pinaagi sa pagbalhin sa datos sa memorya mga kanal sa golang sa samang proseso. Ang sunod nga tumong mao ang segregation, i.e. independente nga paglansad sa dula sa laing proseso.

    Open source cloud gaming sa WebRTC: p2p, multiplayer, zero latency
    Interaksyon sa mga sangkap sa trabahante

    Panguna nga mga sangkap:

    • WebRTC: usa ka bahin sa kliyente nga modawat sa input sa user ug magpagawas sa gi-encode nga media gikan sa server.
    • Game emulator: sangkap sa dula. Salamat sa librarya sa Libretro, ang sistema makahimo sa pagpadagan sa dula sa sulod sa parehas nga proseso ug pag-intercept sa media ug input stream sa sulod.
    • Ang in-game nga mga frame makuha ug ipadala ngadto sa encoder.
    • Image/audio encoder: usa ka encoding pipeline nga nakadawat sa media frames, nag-encode niini sa background, ug nagpagawas ug naka-encode nga mga hulagway/audio.

    Pagpatuman

    Ang CloudRetro nagsalig sa WebRTC isip usa ka backbone nga teknolohiya, mao nga sa wala pa mosalom sa mga detalye sa pagpatuman sa Golang, nakahukom ko nga maghisgot bahin sa WebRTC mismo. Kini usa ka talagsaon nga piraso sa teknolohiya nga nakatabang kanako pag-ayo sa pagkab-ot sa sub-segundo nga streaming latency.

    WebRTC

    Gidisenyo ang WebRTC aron mahatagan ug taas nga kalidad nga mga koneksyon sa peer-to-peer sa lumad nga mobile app ug mga browser gamit ang yano nga mga API.

    NAT Traversal

    Nailhan ang WebRTC tungod sa pagpaandar niini sa NAT Traversal. Gidisenyo ang WebRTC alang sa komunikasyon sa peer-to-peer. Ang katuyoan niini mao ang pagpangita sa labing tukma nga direkta nga ruta, paglikay sa mga ganghaan sa NAT ug mga firewall, sa peer-to-peer pinaagi sa usa ka proseso nga gitawag ICE. Isip kabahin niini nga proseso, ang WebRTC APIs mangita sa imong public IP address gamit ang STUN servers ug ipasa kini ngadto sa relay server (PAGLIKOD) kung ang usa ka direkta nga koneksyon dili maestablisar.

    Bisan pa, dili hingpit nga gipahimuslan sa CloudRetro kini nga kapabilidad. Ang mga peer-to-peer nga mga koneksyon wala maglungtad tali sa mga tiggamit, apan tali sa mga tiggamit ug mga cloud server. Ang server nga bahin sa modelo adunay gamay nga mga pagdili sa direkta nga komunikasyon kaysa usa ka tipikal nga aparato sa tiggamit. Gitugotan ka niini nga mag-pre-open sa umaabot nga mga pantalan o direkta nga mogamit sa mga pampublikong IP address, tungod kay ang server wala sa luyo sa NAT.

    Kaniadto, gusto nako nga himuon ang proyekto nga usa ka platform sa pag-apod-apod sa dula alang sa Cloud Gaming. Ang ideya mao ang pagtugot sa mga tiglalang sa dula nga maghatag mga dula ug mga kapanguhaan sa streaming. Ug ang mga tiggamit direktang makig-uban sa mga provider. Niini nga desentralisado nga paagi, ang CloudRetro usa lamang ka medium alang sa pagkonektar sa ikatulo nga partido nga streaming nga mga kapanguhaan ngadto sa mga tiggamit, nga naghimo niini nga mas scalable kung ang pag-host wala na nagbitay niini. Ang tahas sa WebRTC NAT Traversal importante kaayo dinhi aron mapadali ang pagsugod sa usa ka peer-to-peer nga koneksyon sa third-party streaming resources, nga makapasayon ​​sa tiglalang sa pagkonektar sa network.

    Pag-compress sa video

    Ang compression sa video usa ka kinahanglanon nga bahin sa pipeline ug dako ang natampo sa kahapsay sa sapa. Bisan kung dili kinahanglan nga mahibal-an ang tanan nga mga detalye sa pag-encode sa video sa VP8 / H264, ang pagsabut sa konsepto makatabang sa pagsabut sa mga parameter sa tulin sa streaming sa video, pag-debug sa wala damha nga pamatasan ug pag-adjust sa latency.

    Ang pag-compress sa video alang sa usa ka streaming nga serbisyo mahagiton tungod kay ang algorithm kinahanglan nga masiguro nga ang kinatibuk-ang oras sa pag-encode + oras sa pagbalhin sa network + oras sa pag-decode gamay ra kutob sa mahimo. Dugang pa, ang proseso sa pag-encode kinahanglan nga makanunayon ug padayon. Ang ubang mga trade-off sa pag-encode dili magamit - pananglitan, dili namo gusto ang taas nga oras sa pag-encode sa mas gamay nga gidak-on sa file ug oras sa pag-decode, o gamiton ang dili managsama nga compression.

    Ang ideya luyo sa video compression mao ang pagwagtang sa wala kinahanglana nga mga piraso sa impormasyon samtang nagmintinar sa usa ka madawat nga lebel sa pagkamatinud-anon alang sa mga tiggamit. Dugang sa pag-encode sa indibidwal nga static nga mga frame sa imahe, ang algorithm nag-infer alang sa kasamtangan nga frame gikan sa kaniadto ug sa sunod, mao nga ang ilang kalainan lamang ang gipadala. Sama sa imong makita gikan sa panig-ingnan sa Pacman, ang mga punto sa kalainan ra ang gipasa.

    Open source cloud gaming sa WebRTC: p2p, multiplayer, zero latency
    Pagtandi sa mga video frame gamit ang Pacman isip pananglitan

    Audio compression

    Sa susama, ang audio compression algorithm nagtangtang sa mga datos nga dili masabtan sa mga tawo. Ang Opus karon ang labing maayo nga performing audio codec. Gidisenyo kini sa pagpasa ug audio wave sa usa ka ordered datagram protocol sama sa RTP (Real Time Transport Protocol). Ang paglangan niini mas gamay kaysa sa mp3 ug aac, ug ang kalidad mas taas. Ang latency kasagaran mga 5~66,5ms.

    Pion, WebRTC sa Golang

    Pawn usa ka open source nga proyekto nga nagdala sa WebRTC sa Golang. Imbis sa naandan nga pagputos sa lumad nga C++ WebRTC nga mga librarya, ang Pion usa ka lumad nga Golang WebRTC nga pagpatuman nga adunay mas maayo nga performance, Go integration, ug version control sa WebRTC protocols.

    Naghatag usab ang librarya sa streaming data nga adunay daghang daghang mga built-in nga module nga adunay paglangan nga wala’y usa ka segundo. Kini adunay kaugalingong pagpatuman sa STUN, DTLS, SCTP, ug uban pa. ug pipila ka eksperimento sa QUIC ug WebAssembly. Sa iyang kaugalingon, kini nga bukas nga gigikanan nga librarya usa ka maayo kaayo nga gigikanan sa pagkat-on nga adunay daghang dokumentasyon, mga pagpatuman sa protocol sa network, ug mga cool nga ehemplo.

    Ang komunidad sa Pion, nga gipangulohan sa usa ka madasigon kaayo nga tiglalang, medyo buhi ug adunay daghang kalidad nga diskusyon bahin sa WebRTC. Kung interesado ka niini nga teknolohiya, pag-apil http://pion.ly/slack - makakat-on ka og daghang bag-ong mga butang.

    Pagsulat CloudRetro sa Golang

    Open source cloud gaming sa WebRTC: p2p, multiplayer, zero latency
    Worker Implementation sa Go

    Lakaw sa mga channel sa aksyon

    Uban sa matahum nga disenyo sa mga channel ni Go, ang mga isyu sa pag-streaming sa panghitabo ug panagsama gipasayon ​​kaayo. Sama sa diagram, adunay daghang mga sangkap nga nagdagan nga managsama sa lainlaing mga GoRoutine. Ang matag sangkap nagdumala sa kaugalingon nga estado ug nakigsulti pinaagi sa mga kanal. Ang mapili nga assertion ni Golang hinungdan nga usa ka atomic nga panghitabo ang maproseso matag higayon sa dula (game tick). Kini nagpasabot nga walay blocking ang gikinahanglan alang niini nga disenyo. Pananglitan, kung ang usa ka tiggamit maluwas, gikinahanglan ang usa ka bug-os nga snapshot sa estado sa dula. Kini nga estado kinahanglan magpabilin nga padayon, pag-log in hangtod makompleto ang pag-save. Atol sa matag tick sa dula, ang backend mahimo ra nga magproseso sa usa ka save o enter nga operasyon, nga naghimo sa proseso nga luwas sa thread.

    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

    Kini nga template sa Golang maayo alang sa akong CrowdPlay ug Multiple Player use case. Pagsunod niini nga sumbanan, ang tanan nga mga input sa gumagamit sa parehas nga kwarto gitukod sa sentro nga channel sa input. Ang media sa dula dayon i-deploy sa tanan nga tiggamit sa parehas nga kwarto. Niining paagiha, nakab-ot namon ang pagkabahin sa kahimtang sa dula tali sa daghang mga sesyon sa dula sa lainlaing mga tiggamit.

    Open source cloud gaming sa WebRTC: p2p, multiplayer, zero latency
    Pag-synchronize tali sa lainlaing mga sesyon

    Disbentaha sa Golang

    Dili perpekto si Golang. Hinay ang channel. Kung itandi sa pag-block, ang usa ka channel sa Go usa ka dali nga paagi sa pagdumala sa mga dungan ug streaming nga mga panghitabo, apan ang usa ka channel wala maghatag labing kaayo nga pasundayag. Ubos sa channel adunay usa ka komplikado nga blocking logic. Busa, naghimo ako pipila ka mga pagbag-o sa pagpatuman pinaagi sa pag-apply pag-usab sa mga kandado ug atomic nga kantidad kung gipulihan ang mga channel aron ma-optimize ang pasundayag.

    Dugang pa, ang tigkolekta sa basura ni Golang dili madumala, nga usahay hinungdan sa kadudahang taas nga paghunong. Makabalda kaayo kini sa real-time streaming application.

    COG

    Ang proyekto naggamit sa kasamtangan nga VP8/H264 open source Golang library para sa media compression ug Libretro para sa mga game emulator. Ang tanan niini nga mga librarya kay mga wrapper lang para sa C library sa Go gamit COG. Ang pipila sa mga disbentaha gilista sa kini nga post Dave Cheney. Mga problema nga akong giatubang:

    • kawalay katakus nga makadakop og crash sa CGO, bisan sa Golang RecoveryCrash;
    • ang kawalay katakus sa pag-ila sa usa ka bottleneck sa pasundayag kung dili kami makamatikod sa mga granular nga isyu sa CGO.

    konklusyon

    Nakab-ot nako ang akong katuyoan nga mahibal-an ang mga serbisyo sa pasugalan sa panganod ug paghimo usa ka plataporma nga makatabang kanako nga magdula mga nostalgic nga retro nga dula kauban ang akong mga higala online. Kini nga proyekto dili mahimo kung wala ang librarya sa Pion ug ang suporta sa komunidad sa Pion. Mapasalamaton kaayo ko sa iyang intensive development. Ang yano nga mga API nga gihatag sa WebRTC ug Pion nagsiguro nga hapsay nga panagsama. Ang akong una nga pruweba sa konsepto gipagawas sa parehas nga semana, bisan kung wala nahibal-an ang mga komunikasyon sa peer-to-peer (P2P) kaniadto.

    Bisan pa sa kadali sa panagsama, ang P2P streaming sa tinuud usa ka komplikado nga lugar sa siyensya sa kompyuter. Kinahanglan nga atubangon niini ang pagkakomplikado sa mga arkitektura sa network nga daghang tuig sama sa IP ug NAT aron makahimo usa ka sesyon sa peer-to-peer. Samtang nagtrabaho niini nga proyekto, nakatigom ko og daghang bililhong kahibalo bahin sa networking ug pag-optimize sa performance, mao nga girekomendar nako nga ang tanan mosulay sa paghimo og mga produkto nga P2P gamit ang WebRTC.

    Ang CloudRetro nagsilbi alang sa tanan nga mga kaso sa paggamit nga akong gilauman gikan sa akong punto sa panglantaw isip usa ka retro gamer. Bisan pa, sa akong hunahuna adunay daghang mga bahin sa proyekto nga akong mapauswag, sama sa paghimo sa network nga mas kasaligan ug performant, paghatag og mas taas nga kalidad nga mga graphic sa dula, o ang abilidad sa pagpaambit sa mga dula tali sa mga tiggamit. Ako naghago niini. Palihug sundan proyekto ug suportahan siya kung ganahan ka niya.

Source: www.habr.com

Idugang sa usa ka comment