Logħob tas-sħab b'sors miftuħ fuq WebRTC: p2p, multiplayer, latency żero

Logħob tas-sħab b'sors miftuħ fuq WebRTC: p2p, multiplayer, latency żero
Software bħala servizz, infrastruttura bħala servizz, pjattaforma bħala servizz, pjattaforma ta' komunikazzjoni bħala servizz, video conferencing bħala servizz, xi ngħidu dwar cloud gaming bħala servizz? Diġà kien hemm diversi tentattivi biex jinħoloq cloud gaming (Cloud Gaming), bħal Stadia, imnedija reċentement minn Google. Stadia mhux ġdid għal WebRTC, iżda jistgħu oħrajn jużaw WebRTC bl-istess mod?

Thanh Nguyen iddeċieda li jittestja din l-opportunità fuq il-proġett ta’ sors miftuħ tiegħu CloudRetro. CloudRetro huwa bbażat fuq Pion, popolari Librerija WebRTC ibbażata fuq Go (grazzi murija mit-tim ta’ żvilupp Pion għall-għajnuna tagħhom fit-tħejjija ta’ dan l-artiklu). F'dan l-artikolu, Thanh jipprovdi ħarsa ġenerali lejn l-arkitettura tal-proġett tiegħu, u jitkellem ukoll dwar liema affarijiet utli tgħallem u liema sfidi ltaqa' magħhom waqt ix-xogħol tiegħu.

Dħul

Is-sena l-oħra, meta Google ħabbret Stadia, faqqgħetli moħħi. L-idea hija tant unika u innovattiva li kontinwament staqsejt kif dan kien possibbli anke bit-teknoloġija eżistenti. Ix-xewqa li nifhem aħjar dan is-suġġett wasslitni biex noħloq il-verżjoni tiegħi ta' logħba sħaba open-source. Ir-riżultat kien sempliċiment meraviljuż. Hawn taħt nixtieq naqsam il-proċess ta 'ħidma fuq is-sena tiegħi proġett.

TLDR: verżjoni slide qasira b'punti ewlenin

Għaliex il-cloud gaming huwa l-futur

Nemmen li Cloud Gaming dalwaqt se ssir il-ġenerazzjoni li jmiss mhux biss tal-logħob, iżda wkoll oqsma oħra tax-xjenza tal-kompjuter. Cloud gaming huwa l-quċċata tal-mudell klijent/server. Dan il-mudell jimmassimizza l-ġestjoni backend u jimminimizza x-xogħol ta 'frontend billi jospita loġika tal-logħob fuq server remot u streaming immaġini/awdjo lill-klijent. Is-server jagħmel l-ipproċessar tqil sabiex il-klijent m'għadux fil-ħniena tal-limitazzjonijiet tal-hardware.

Google Stadia essenzjalment iħallik tilgħab Logħob AAA (jiġifieri logħob blockbuster high-end) fuq interface bħal YouTube. L-istess metodoloġija tista 'tiġi applikata għal applikazzjonijiet tqal oħra offline bħal sistema operattiva jew disinn grafiku 2D/3D, eċċ. sabiex inkunu nistgħu nħaddmuhom b'mod konsistenti fuq apparati ta 'speċifikazzjoni baxxa fuq pjattaformi multipli.

Logħob tas-sħab b'sors miftuħ fuq WebRTC: p2p, multiplayer, latency żero
Il-futur ta 'din it-teknoloġija: Immaġina jekk Microsoft Windows 10 dam fuq il-browser Chrome?

Cloud gaming huwa teknikament ta’ sfida

Il-logħob huwa wieħed minn dawk l-oqsma rari fejn huwa meħtieġ rispons kostanti u mgħaġġel tal-utent. Jekk kultant niltaqgħu ma' dewmien ta' 2 sekondi meta nikklikkjaw fuq paġna, dan huwa aċċettabbli. Il-flussi tal-vidjow ħajjin għandhom tendenza li jibqgħu lura għal ftit sekondi, iżda xorta joffru użabilità raġonevoli. Madankollu, jekk il-logħba spiss tibqa' lura b'500ms, hija sempliċement ma tistax tintlagħab. L-għan tagħna huwa li niksbu latenza estremament baxxa sabiex id-distakk bejn l-input u l-midja jkun żgħir kemm jista 'jkun. Għalhekk, l-approċċ tradizzjonali għall-istriming tal-vidjo mhuwiex applikabbli hawn.

Logħob tas-sħab b'sors miftuħ fuq WebRTC: p2p, multiplayer, latency żero
Mudell Ġenerali tal-Logħba tas-Sħab

Proġett ta' sors miftuħ CloudRetro

Iddeċidejt li noħloq kampjun tat-test ta' logħba sħaba biex nara jekk dan kollu kienx possibbli b'restrizzjonijiet daqshekk stretti tan-netwerk. Għażilt lil Golang għall-prova tal-kunċett għax kienet l-aktar lingwa li kont familjari magħha u kienet adattata tajjeb għal din l-implimentazzjoni għal ħafna raġunijiet oħra, kif skoprejt aktar tard. Go hija sempliċi u tiżviluppa malajr ħafna; Il-kanali f'Go huma tajbin għall-ġestjoni tal-multithreading.

Proġett CloudRetro.io huwa servizz ta' logħob cloud ta' sors miftuħ għal logħob retro. L-għan tal-proġett huwa li jġib l-aktar esperjenza komda tal-logħob għal-logħob retro tradizzjonali u żżid multiplayer.
Tista' titgħallem aktar dwar il-proġett hawn: https://github.com/giongto35/cloud-game.

Funzjonalità CloudRetro

CloudRetro juża logħob retro biex juri l-qawwa tal-logħob cloud. Li jippermettilek tikseb ħafna esperjenzi uniċi tal-logħob.

  • Portabbiltà tal-logħba
    • Daqq instantanju meta tiftaħ il-paġna; ebda tniżżil jew installazzjoni meħtieġa
    • Jaħdem fi browser mobbli, għalhekk l-ebda software mhu meħtieġ biex iħaddem

  • Is-sessjonijiet tal-logħob jistgħu jiġu kondiviżi fuq diversi apparati u maħżuna fil-cloud għall-ħin li jmiss li tidħol
  • Il-logħba tista' tiġi streamed, jew tista' tintlagħab minn diversi utenti f'daqqa:
    • Crowdplay bħal TwitchPlayPokemon, biss aktar cross-platform u aktar f'ħin reali
    • Logħob offline online. Ħafna utenti jistgħu jilagħbu mingħajr ma jistabbilixxu netwerk. Samurai Shodown issa jista' jintlagħab minn 2 plejers fuq in-netwerk CloudRetro

    Logħob tas-sħab b'sors miftuħ fuq WebRTC: p2p, multiplayer, latency żero
    Verżjoni demo tal-logħba online multiplayer fuq apparati differenti

    Infrastruttura

    Rekwiżiti u munzell tat-teknoloġija

    Hawn taħt hawn lista ta 'rekwiżiti li waqqaft qabel ma nibda l-proġett.

    1. Attur wieħed
    Dan ir-rekwiżit jista 'ma jidhirx wisq importanti jew ovvju hawn, iżda huwa wieħed mill-punti ewlenin tiegħi, jippermetti li l-logħob tal-cloud jibqa' kemm jista 'jkun 'il bogħod mis-servizzi ta' streaming tradizzjonali. Jekk niffukaw fuq logħba b'player wieħed, nistgħu neħilsu minn server ċentralizzat jew CDN għax m'għandniex għalfejn nixxandar lill-mases. Minflok ma jittellgħu flussi fuq server sink jew jgħaddu pakketti lil server WebSocket ċentralizzat, flussi ta 'servizz jitwasslu direttament lill-utent permezz ta' konnessjoni WebRTC peer-to-peer.

    2. Latenza baxxa tan-nixxiegħa tal-midja
    Naqra dwar Stadia, spiss nara WebRTC imsemmi f'xi artikli. Irrealizzajt li WebRTC hija teknoloġija eċċellenti u hija perfetta għall-użu fil-cloud gaming. WebRTC huwa proġett li jipprovdi web browsers u applikazzjonijiet mobbli b'komunikazzjoni f'ħin reali permezz ta' API sempliċi. Tipprovdi konnettività peer-to-peer, hija ottimizzata għall-midja, u għandha codecs standard mibnija bħal VP8 u H264.

    Ipprijoritizzajt li niżgura l-aħjar esperjenza possibbli tal-utent fuq iż-żamma ta' grafika ta' kwalità għolja. Xi telf huma aċċettabbli fl-algoritmu. Google Stadia għandu pass addizzjonali biex inaqqas id-daqs tal-immaġini fuq is-server, u l-frejms jittejbu għal kwalità ogħla qabel ma jiġu trażmessi lill-pari.

    3. Infrastruttura distribwita b'rotot ġeografiku
    Ma jimpurtax kemm huma ottimizzati l-algoritmu u l-kodiċi tal-kompressjoni, in-netwerk għadu l-fattur deċiżiv li jikkontribwixxi l-aktar għal latenza. L-arkitettura għandu jkollha mekkaniżmu li jgħaqqad is-server l-eqreb tal-utent biex jitnaqqas il-ħin tar-ritorn (RTT). L-arkitettura għandu jkollha koordinatur 1 u diversi servers ta' streaming imqassma madwar id-dinja: Punent tal-Istati Uniti, Lvant tal-Istati Uniti, Ewropa, Singapor, Ċina. Is-servers kollha tal-istreaming għandhom ikunu kompletament iżolati. Is-sistema tista 'taġġusta d-distribuzzjoni tagħha meta server jingħaqad jew iħalli n-netwerk. Għalhekk, bi traffiku kbir, iż-żieda ta 'servers addizzjonali tippermetti skalar orizzontali.

    4. Kompatibilità tal-browser
    Cloud gaming huwa fl-aqwa tiegħu meta jeħtieġ l-inqas mill-utenti. Dan ifisser li huwa possibbli li taħdem fil-browser. Il-browsers jgħinu biex l-esperjenza tal-logħob tkun komda kemm jista’ jkun għall-utenti, u jiffrankawhom milli jinstallaw software u hardware. Il-browsers jgħinu wkoll biex jipprovdu funzjonalità bejn il-pjattaformi bejn il-verżjonijiet mobbli u desktop. Fortunatament, WebRTC huwa appoġġjat tajjeb fuq varjetà ta 'browsers.

    5. Separazzjoni ċara tal-interface tal-logħba u s-servizz
    Inqis is-servizz tal-logħob tal-cloud bħala pjattaforma. Kulħadd għandu jkun kapaċi jgħaqqad xi ħaġa mal-pjattaforma. Issa integrajt LibRetro b'servizz tal-logħob tal-cloud minħabba li LibRetro joffri interface sabiħ tal-emulatur tal-logħob għal logħob retro bħal SNES, GBA, PS.

    6. Kmamar għal multiplayer, logħob tal-folla u konnessjoni esterna (deep-link) mal-logħba
    CloudRetro jappoġġja ħafna gameplays ġodda bħal CrowdPlay u Online MultiPlayer għal-logħob retro. Jekk diversi utenti jiftħu l-istess deep-link fuq kompjuters differenti, jaraw l-istess logħba taħdem u saħansitra jkunu jistgħu jingħaqdu magħha.

    Barra minn hekk, l-istati tal-logħob huma maħżuna fil-ħażna tas-sħab. Dan jippermetti lill-utenti jkomplu jilagħbu fi kwalunkwe ħin fuq kwalunkwe apparat ieħor.

    7. Skalar orizzontali
    Bħal kull SAAS illum, il-logħob tal-cloud għandu jkun iddisinjat biex ikun skalabbli orizzontalment. Id-disinn tal-koordinatur-ħaddiem jippermettilek li żżid aktar ħaddiema biex isservi aktar traffiku.

    8. L-ebda konnessjoni ma 'sħaba waħda
    L-infrastruttura ta 'CloudRetro hija ospitata fuq fornituri ta' sħab differenti (Digital Ocean, Alibaba, fornitur tad-dwana) għal reġjuni differenti. Nippermetti t-tħaddim f'kontenitur Docker għall-infrastruttura u kkonfigura s-settings tan-netwerk billi tuża script bash biex nevita li nissakkar f'fornitur wieħed ta' cloud. Billi nikkombinaw dan ma 'NAT Traversal f'WebRTC, jista' jkollna l-flessibbiltà li niskjeraw CloudRetro fuq kwalunkwe pjattaforma tas-sħab u anke fuq il-magni ta 'kwalunkwe utent.

    Disinn arkitettoniku

    Ħaddiem: (jew is-server tal-istrimjar imsemmi hawn fuq) jimmultiplika l-logħob, imexxi l-pipeline tal-kodifikazzjoni, u jgħaddi l-midja kodifikata lill-utenti. L-istanzi tal-ħaddiema huma mqassma madwar id-dinja, u kull ħaddiem jista 'jimmaniġġja sessjonijiet multipli tal-utenti simultanjament.

    Koordinatur: huwa responsabbli biex jgħaqqad l-utent il-ġdid mal-ħaddiem l-aktar adattat għall-istreaming. Il-koordinatur jinteraġixxi mal-ħaddiema permezz tal-WebSocket.

    Ħażna tal-istat tal-logħba: ħażna remota ċentrali għall-istati kollha tal-logħob. Din il-ħażna tipprovdi funzjonijiet importanti bħal salvataġġ/tagħbija mill-bogħod.

    Logħob tas-sħab b'sors miftuħ fuq WebRTC: p2p, multiplayer, latency żero
    Arkitettura tal-ogħla livell ta' CloudRetro

    Script tad-dwana

    Meta utent ġdid jiftaħ CloudRetro fil-passi 1 u 2 murija fil-figura hawn taħt, il-koordinatur flimkien mal-lista tal-ħaddiema disponibbli jintalbu fl-ewwel paġna. Wara dan, fil-pass 3 il-klijent jikkalkula d-dewmien għall-kandidati kollha billi juża talba HTTP ping. Din il-lista ta’ dewmien imbagħad tintbagħat lura lill-koordinatur sabiex ikun jista’ jiddetermina l-iktar ħaddiem adattat biex iservi lill-utent. Il-pass 4 hawn taħt joħloq il-logħba. Konnessjoni ta' streaming WebRTC hija stabbilita bejn l-utent u l-ħaddiem assenjat.
    Logħob tas-sħab b'sors miftuħ fuq WebRTC: p2p, multiplayer, latency żero
    Iskrittura tal-utent wara li tikseb aċċess

    X'hemm ġewwa l-ħaddiem

    Il-pipelines tal-logħob u tal-istrimjar huma maħżuna ġewwa l-ħaddiem b'mod iżolat u jiskambjaw informazzjoni hemmhekk permezz tal-interface. Bħalissa, din il-komunikazzjoni titwettaq billi tittrasferixxi data fil-memorja permezz kanali Golang fl-istess proċess. L-għan li jmiss huwa s-segregazzjoni, i.e. tnedija indipendenti tal-logħba fi proċess ieħor.

    Logħob tas-sħab b'sors miftuħ fuq WebRTC: p2p, multiplayer, latency żero
    Interazzjoni tal-komponenti tal-ħaddiema

    Komponenti ewlenin:

    • WebRTC: komponent tal-klijent li jaċċetta input tal-utent u joħroġ midja kodifikata mis-server.
    • Emulatur tal-logħob: komponent tal-logħba. Grazzi għal-librerija Libretro, is-sistema hija kapaċi tmexxi l-logħba fl-istess proċess u internament tinterċetta l-midja u l-fluss ta 'input.
    • Il-frejms fil-logħba jinqabdu u jintbagħtu lill-encoder.
    • Kodifikatur tal-Immaġni/Awdjo: pipeline ta 'kodifikazzjoni li jieħu frejms tal-midja, jikkodifikahom fl-isfond, u joħroġ immaġini/awdjo kodifikati.

    Реализация

    CloudRetro tiddependi fuq WebRTC bħala t-teknoloġija tas-sinsla tagħha, għalhekk qabel ma tgħaddas fid-dettalji tal-implimentazzjoni ta 'Golang, iddeċidejt li nitkellem dwar WebRTC innifsu. Din hija teknoloġija tal-għaġeb li għenitni ħafna fil-kisba ta' latenza ta' taħt it-tieni għall-istrimjar tad-dejta.

    WebRTC

    WebRTC huwa ddisinjat biex jipprovdi konnessjonijiet peer-to-peer ta 'kwalità għolja fuq apps mobbli u browsers indiġeni li jużaw APIs sempliċi.

    NAT Traversal

    WebRTC huwa magħruf għall-funzjonalità tiegħu NAT Traversal. WebRTC huwa ddisinjat għal komunikazzjoni peer-to-peer. L-għan tiegħu huwa li ssib l-aktar rotta diretta adattata, billi tevita l-gateways u l-firewalls NAT għal komunikazzjoni peer-to-peer permezz ta’ proċess imsejjaħ ICE. Bħala parti minn dan il-proċess, il-WebRTC APIs isibu l-indirizz IP pubbliku tiegħek billi jużaw servers STUN u jgħadduh lis-server relay (DAWRAN) meta ma tistax tiġi stabbilita konnessjoni diretta.

    Madankollu, CloudRetro ma jisfruttax għal kollox din il-karatteristika. Il-konnessjonijiet peer-to-peer tagħha ma jeżistux bejn l-utenti, iżda bejn l-utenti u s-servers tal-cloud. In-naħa tas-server tal-mudell għandha inqas restrizzjonijiet ta 'komunikazzjoni diretta minn apparat tipiku tal-utent. Dan jippermettilek li tiftaħ minn qabel portijiet deħlin jew tuża indirizzi IP pubbliċi direttament, peress li s-server mhuwiex wara NAT.

    Preċedentement, ridt li nbiddel il-proġett fi pjattaforma ta 'distribuzzjoni tal-logħob għal Cloud Gaming. L-idea kienet li tippermetti lill-ħallieqa tal-logħob jipprovdu logħob u riżorsi streaming. U l-utenti jinteraġixxu mal-fornituri direttament. B'dan il-mod deċentralizzat, CloudRetro huwa biss qafas għall-konnessjoni ta 'riżorsi ta' streaming ta 'partijiet terzi ma' utenti, li jagħmilha aktar skalabbli meta ma tibqax ospitata. Ir-rwol ta 'WebRTC NAT Traversal hawnhekk huwa importanti ħafna biex jiffaċilita l-inizjalizzazzjoni tal-konnessjoni peer-to-peer fuq riżorsi ta' streaming ta 'partijiet terzi, li jagħmilha aktar faċli għall-kreatur biex jgħaqqad man-netwerk.

    Kompressjoni tal-vidjo

    Il-kompressjoni tal-vidjo hija parti indispensabbli tal-pipeline u tikkontribwixxi ħafna għal fluss bla xkiel. Filwaqt li mhuwiex meħtieġ li tkun taf kull dettall tal-kodifikazzjoni tal-vidjo VP8/H264, il-fehim tal-kunċetti jista 'jgħinek tifhem l-għażliet tal-veloċità tal-vidjow tal-istrimjar, tiddibaggja l-imġieba mhux mistennija, u taġġusta l-latency.

    Il-kompressjoni tal-vidjo għal servizz ta 'streaming hija ta' sfida minħabba li l-algoritmu għandu jiżgura li l-ħin totali ta 'kodifikazzjoni + ħin ta' trasmissjoni tan-netwerk + ħin ta 'dekodifikazzjoni huwa baxx kemm jista' jkun. Barra minn hekk, il-proċess ta 'kodifikazzjoni għandu jkun konsistenti u kontinwu. Xi kompromessi ta 'kodifikazzjoni ma japplikawx—per eżempju, ma nistgħux niffavorixxu ħinijiet twal ta' kodifikazzjoni fuq daqsijiet iżgħar ta 'fajls u ħinijiet ta' dekodifikazzjoni, jew nużaw kompressjoni inkonsistenti.

    L-idea wara l-kompressjoni tal-vidjo hija li telimina l-bits ta 'informazzjoni mhux meħtieġa filwaqt li jinżamm livell aċċettabbli ta' preċiżjoni għall-utenti. Minbarra l-kodifikazzjoni ta 'frejms ta' immaġini statiċi individwali, l-algoritmu jiddeduċi l-qafas attwali minn dawk ta 'qabel u dawk li jmiss, għalhekk tintbagħat biss id-differenza tagħhom. Kif jidher mill-eżempju ma 'Pacman, punti differenzjali biss huma trażmessi.

    Logħob tas-sħab b'sors miftuħ fuq WebRTC: p2p, multiplayer, latency żero
    Tqabbil ta 'frejms tal-vidjo bl-użu ta' Pacman bħala eżempju

    Kompressjoni awdjo

    Bl-istess mod, l-algoritmu tal-kompressjoni tal-awdjo jħalli barra data li ma tistax tiġi pperċepita mill-bnedmin. Opus bħalissa huwa l-codec awdjo bl-aħjar prestazzjoni. Hija mfassla biex tittrasmetti mewġa awdjo fuq protokoll ta' datagram ordnat bħal RTP (Protokoll tat-Trasport f'Ħin Reali). Il-latency tagħha hija inqas minn mp3 u aac, u l-kwalità hija ogħla. Il-latency huwa ġeneralment madwar 5 ~ 66,5ms.

    Pion, WebRTC f'Golang

    Pawn huwa proġett open source li jġib WebRTC għal Golang. Minflok it-tgeżwir tas-soltu ta 'libreriji C++ WebRTC nattivi, Pion huwa implimentazzjoni nattiva ta' Golang ta 'WebRTC b'rendiment aħjar, integrazzjoni Go, u kontroll tal-verżjoni fuq protokolli WebRTC.

    Il-librerija tippermetti wkoll l-istrimjar b'ħafna built-ins kbar b'latency sub-sekonda. Għandu l-implimentazzjoni tiegħu stess ta 'STUN, DTLS, SCTP, eċċ. u xi esperimenti b'QUIC u WebAssembly. Din il-librerija ta’ sors miftuħ innifsu hija riżorsa ta’ tagħlim tassew tajba b’dokumentazzjoni eċċellenti, implimentazzjonijiet ta’ protokoll tan-netwerk, u eżempji friski.

    Il-komunità Pion, immexxija minn kreatur passjonat ħafna, hija pjuttost vivaċi, b'ħafna diskussjonijiet ta 'kwalità għaddejjin dwar WebRTC. Jekk inti interessat f'din it-teknoloġija, ingħaqad http://pion.ly/slack – titgħallem ħafna affarijiet ġodda.

    Kitba ta' CloudRetro f'Golang

    Logħob tas-sħab b'sors miftuħ fuq WebRTC: p2p, multiplayer, latency żero
    Implimentazzjoni ta’ ħaddiem f’Go

    Go Channels fl-Azzjoni

    Grazzi għad-disinn tal-kanal sabiħ ta 'Go, il-problemi tal-istrimjar tal-avvenimenti u l-konkorrenza huma ssimplifikati ħafna. Bħal fid-dijagramma, GoRoutines differenti għandhom komponenti multipli li jaħdmu b'mod parallel. Kull komponent jimmaniġġja l-istat tiegħu u jikkomunika permezz ta 'kanali. L-affermazzjoni selettiva ta' Golang iġiegħel avveniment atomiku wieħed jiġi pproċessat kull darba fil-logħba (immarka tal-logħba). Dan ifisser li l-ebda qfil mhu meħtieġ għal dan id-disinn. Pereżempju, meta utent jiffranka, tinħtieġ stampa sħiħa tal-istat tal-logħba. Dan l-istat għandu jibqa' kontinwu, illoggja sakemm jitlesta l-iffrankar. Matul kull immarka tal-logħba, il-backend jista 'jimmaniġġja biss operazzjoni ta' salvataġġ jew input, u jagħmel il-ħajt tal-proċess sikur.

    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

    Dan il-mudell Golang jaqbel perfettament mal-każ tal-użu CrowdPlay u Multiple Player tiegħi. Wara dan il-mudell, l-inputs kollha tal-utent f'kamra waħda huma mibnija fil-kanal tad-dħul ċentrali. Il-midja tal-logħob imbagħad tiġi skjerata lill-utenti kollha fl-istess kamra. B'dan il-mod, niksbu d-diviżjoni tal-istat tal-logħba bejn diversi sessjonijiet tal-logħob ta 'utenti differenti.

    Logħob tas-sħab b'sors miftuħ fuq WebRTC: p2p, multiplayer, latency żero
    Sinkronizzazzjoni bejn sessjonijiet differenti

    Żvantaġġi ta 'Golang

    Golang mhux perfett. Il-kanal huwa bil-mod. Meta mqabbel mal-imblukkar, il-kanal Go huwa sempliċiment mod eħfef biex timmaniġġja avvenimenti konkorrenti u bil-kamin, iżda l-kanal ma jipprovdix l-aħjar prestazzjoni. Hemm loġika ta 'imblukkar kumplessa taħt il-kanal. Allura għamilt xi aġġustamenti għall-implimentazzjoni, applikajt mill-ġdid serraturi u valuri atomiċi meta ssostitwixxa l-kanali biex inottimizzaw il-prestazzjoni.

    Barra minn hekk, il-kollettur taż-żibel f'Golang mhuwiex immaniġġjat, li xi drabi jikkawża pawżi suspettużi twal. Dan jinterferixxi ħafna mal-applikazzjoni tal-istrimjar f'ħin reali.

    COG

    Il-proġett juża l-librerija eżistenti ta 'sors miftuħ Golang VP8/H264 għall-kompressjoni tal-midja u Libretro għall-emulaturi tal-logħob. Kollha ta 'dawn il-libreriji huma sempliċiment tgeżwir tal-librerija C fl-użu Go COG. Uħud mill-iżvantaġġi huma elenkati fi din il-kariga minn Dave Cheney. Problemi li ltqajt magħhom:

    • inabbiltà li taqbad ħabta f'CGO, anke b'Golang RecoveryCrash;
    • nuqqas li nidentifikaw il-konġestjonijiet fil-prestazzjoni meta ma nkunux nistgħu niskopru problemi dettaljati fis-CGO.

    Konklużjoni

    Ksibt l-għan tiegħi li nifhem is-servizzi tal-logħob tal-cloud u noħloq pjattaforma li tgħinni nilgħab logħob retro nostalġiku mal-ħbieb tiegħi online. Dan il-proġett ma kienx ikun possibbli mingħajr il-librerija Pion u l-appoġġ tal-komunità Pion. Jiena grat ħafna għall-iżvilupp intensiv tiegħu. L-APIs sempliċi pprovduti minn WebRTC u Pion żguraw integrazzjoni bla xkiel. L-ewwel prova tal-kunċett tiegħi ġiet rilaxxata dik l-istess ġimgħa, minkejja li ma kelli l-ebda għarfien minn qabel tal-komunikazzjoni bejn il-pari (P2P).

    Minkejja l-faċilità tal-integrazzjoni, l-istreaming P2P huwa tabilħaqq qasam kumpless ħafna fix-xjenza tal-kompjuter. Hija trid tittratta l-kumplessità ta 'arkitetturi tan-netwerk li ilhom jeżistu bħal IP u NAT biex toħloq sessjoni peer-to-peer. Waqt li naħdem fuq dan il-proġett, ksibt ħafna għarfien siewi dwar in-netwerking u l-ottimizzazzjoni tal-prestazzjoni, għalhekk inħeġġeġ lil kulħadd biex jipprova jibni prodotti P2P billi juża WebRTC.

    CloudRetro jaħseb għall-każijiet ta 'użu kollha li stennejt mill-perspettiva tiegħi bħala gamer retro. Madankollu, naħseb li hemm ħafna oqsma fil-proġett li nista 'ntejjeb, bħal li n-netwerk isir aktar affidabbli u performant, li jipprovdi grafika tal-logħob ta' kwalità ogħla, jew il-kapaċità li taqsam il-logħob bejn l-utenti. Qed naħdem ħafna fuq dan. Jekk jogħġbok segwi proġett u tappoġġjaha jekk togħġobkom.

Sors: www.habr.com

Żid kumment