WebRTC-də açıq mənbə bulud oyunu: p2p, multiplayer, sıfır gecikmə

WebRTC-də açıq mənbə bulud oyunu: p2p, multiplayer, sıfır gecikmə
Xidmət kimi proqram təminatı, xidmət kimi infrastruktur, xidmət kimi platforma, xidmət kimi kommunikasiya platforması, xidmət kimi video konfrans və xidmət kimi Cloud Gaming haqqında nə demək olar? Bu yaxınlarda Google tərəfindən istifadəyə verilmiş Stadia kimi bulud oyunlarını (Cloud Gaming) yaratmaq üçün artıq bir neçə cəhd edilib. Stadiya WebRTC üçün yeni deyil, lakin başqaları eyni şəkildə WebRTC-dən istifadə edə bilərmi?

Thanh Nguyen bu imkanı özünün açıq mənbəli CloudRetro layihəsi üzərində sınaqdan keçirməyə qərar verdi. CloudRetro Pion-a əsaslanır, populyar Go əsasında WebRTC kitabxanası (təşəkkürlər Shownu Pion inkişaf qrupundan bu məqalə ilə bağlı köməklərinə görə). Bu yazıda Thanh öz layihəsinin arxitekturası haqqında ümumi məlumat verir, həmçinin faydalı öyrəndikləri və işləyərkən hansı çətinliklərlə üzləşdiyi barədə danışır.

Giriş

Keçən il Google Stadia-nı elan edəndə heyrətə gəldim. İdeya o qədər unikal və innovativdir ki, mən daim bunun mövcud texnologiyalarla necə mümkün olduğunu düşünürdüm. Bu mövzunu daha yaxşı başa düşmək istəyi məni açıq mənbə bulud oyununun öz versiyasını yaratmağa sövq etdi. Nəticə sadəcə fantastik idi. Aşağıda illik işimlə bağlı iş prosesini bölüşmək istərdim layihə.

TLDR: vurğulanan qısa slayd versiyası

Niyə bulud oyunları gələcəkdir

İnanıram ki, Cloud Gaming tezliklə təkcə oyunların deyil, kompüter elminin digər sahələrinin də yeni nəslinə çevriləcək. Bulud oyunları müştəri/server modelinin zirvəsidir. Bu model, uzaq serverdə oyun məntiqini yerləşdirmək və müştəriyə şəkillər/audio yayımlamaqla backend idarəçiliyini maksimum dərəcədə artırır və frontend işini minimuma endirir. Server ağır emal edir ki, müştəri artıq hardware məhdudiyyətlərinə məruz qalmasın.

Google Stadia əsasən oynamaq imkanı verir AAA oyunları (yəni yüksək səviyyəli blokbaster oyunları) YouTube kimi bir interfeysdə. Eyni metodologiya əməliyyat sistemi və ya 2D/3D qrafik dizayn və s. kimi digər ağır oflayn tətbiqlərə də tətbiq oluna bilər. belə ki, biz onları platformalar arasında aşağı xüsusiyyətli cihazlarda sabit şəkildə işlədə bilək.

WebRTC-də açıq mənbə bulud oyunu: p2p, multiplayer, sıfır gecikmə
Bu texnologiyanın gələcəyi: Microsoft Windows 10-un Chrome brauzerində işlədiyini təsəvvür edin?

Bulud oyunları texniki cəhətdən çətindir

Oyun, istifadəçinin daimi sürətli reaksiyasının tələb olunduğu nadir sahələrdən biridir. Hərdən bir səhifəyə klikləyərkən 2 saniyə gecikmə ilə qarşılaşırıqsa, bu məqbuldur. Canlı video axınları adətən bir neçə saniyə geridə qalır, lakin yenə də kifayət qədər istifadə imkanları təklif edir. Ancaq oyun tez-tez 500 ms gecikirsə, sadəcə oynamaq mümkün deyil. Məqsədimiz son dərəcə aşağı gecikmə müddətinə nail olmaqdır ki, giriş və media arasındakı boşluq mümkün qədər kiçik olsun. Buna görə də, video axınına ənənəvi yanaşma burada tətbiq edilmir.

WebRTC-də açıq mənbə bulud oyunu: p2p, multiplayer, sıfır gecikmə
Ümumi bulud oyun şablonu

Açıq mənbə layihəsi CloudRetro

Bütün bunların belə ciddi şəbəkə məhdudiyyətləri ilə mümkün olub-olmadığını görmək üçün bulud oyununun sınaq nümunəsini yaratmağa qərar verdim. Mən konsepsiyanın sübutu üçün Golanq dilini seçdim, çünki bu, mənim ən çox tanış olduğum dildir və sonradan öyrəndiyim kimi bir çox başqa səbəblərə görə bu tətbiq üçün yaxşı uyğundur. Go sadədir və çox tez inkişaf edir; Go-da kanallar çox iş parçacığını idarə etmək üçün əladır.

Layihə CloudRetro.io retro oyunlar üçün açıq mənbə bulud oyun xidmətidir. Layihənin məqsədi ənənəvi retro oyunlara ən rahat oyun təcrübəsini gətirmək və multiplayer əlavə etməkdir.
Layihə haqqında ətraflı məlumatı buradan əldə edə bilərsiniz: https://github.com/giongto35/cloud-game.

CloudRetro funksionallığı

CloudRetro bulud oyununun gücünü nümayiş etdirmək üçün retro oyunlardan istifadə edir. Bu, çoxlu unikal oyun təcrübəsi əldə etməyə imkan verir.

  • Oyunun daşınması
    • Səhifəni açarkən dərhal oxutma; yükləmə və quraşdırma tələb olunmur
    • Mobil brauzerdə işləyir, ona görə də işləmək üçün heç bir proqram tələb olunmur

  • Oyun seansları bir neçə cihaz arasında paylaşıla və növbəti giriş üçün buludda saxlanıla bilər
  • Oyun yayımlana bilər və ya eyni anda bir neçə istifadəçi ilə oynaya bilərsiniz:
    • TwitchPlayPokemon kimi izdiham oyunu, daha çox platformalararası və daha çox real vaxt
    • Offline oyunlar online. Bir çox istifadəçi şəbəkə quraşdırma olmadan oynaya bilər. Samurai Shodown indi CloudRetro şəbəkəsi üzərindən 2 oyunçu ilə oynana bilər

    WebRTC-də açıq mənbə bulud oyunu: p2p, multiplayer, sıfır gecikmə
    Müxtəlif cihazlarda onlayn multiplayer oyunun demo versiyası

    İnfrastruktur

    Tələblər və texnologiya yığını

    Aşağıda layihəyə başlamazdan əvvəl qoyduğum tələblərin siyahısı verilmişdir.

    1. Bir oyunçu
    Bu tələb burada çox vacib və aşkar görünməyə bilər, lakin bu, mənim əsas təkliflərimdən biridir, bulud oyunlarını ənənəvi axın xidmətlərindən mümkün qədər uzaqlaşdırır. Tək oyunçu oyununa diqqət yetirsək, mərkəzləşdirilmiş serverdən və ya CDN-dən xilas ola bilərik, çünki kütlələrə axın etmək məcburiyyətində deyilik. Axınları qəbul edən serverə yükləmək və ya paketləri mərkəzləşdirilmiş WebSocket serverinə ötürmək əvəzinə, xidmət axınları birbaşa WebRTC peer bağlantısı vasitəsilə istifadəçiyə ötürülür.

    2. Aşağı gecikmə media axını
    Stadia haqqında oxuyarkən tez-tez bəzi məqalələrdə WebRTC-nin qeyd edildiyini görürəm. Mən başa düşdüm ki, WebRTC əla texnologiyadır və bulud oyunlarında istifadə üçün əladır. WebRTC sadə API vasitəsilə veb-brauzerləri və mobil proqramları real vaxt rejimində əlaqə ilə təmin edən layihədir. O, peer-to-peer bağlantısı təmin edir, media üçün optimallaşdırılıb və VP8 və H264 kimi daxili standart kodeklərə malikdir.

    Mən yüksək keyfiyyətli qrafika saxlamaqdansa, mümkün olan ən yaxşı istifadəçi təcrübəsini təmin etməyə üstünlük verdim. Alqoritmdə bəzi itkilərə yol verilir. Google Stadia-nın serverdəki təsvir ölçüsünü azaltmaq üçün əlavə bir addımı var və çərçivələr həmyaşıdlarına ötürülməzdən əvvəl daha yüksək keyfiyyətə yüksəldilir.

    3. Coğrafi marşrutlaşdırma ilə paylanmış infrastruktur
    Sıxılma alqoritmi və kodunun nə qədər optimallaşdırılmasından asılı olmayaraq, şəbəkə hələ də gecikməyə ən çox töhfə verən həlledici amildir. Arxitekturada gediş-gəliş vaxtını (RTT) azaltmaq üçün istifadəçiyə ən yaxın serveri cütləşdirmək mexanizmi olmalıdır. Arxitekturada 1 koordinator və dünya üzrə yayılmış bir neçə axın serveri olmalıdır: ABŞ Qərbi, ABŞ Şərqi, Avropa, Sinqapur, Çin. Bütün axın serverləri tamamilə təcrid olunmalıdır. Server şəbəkəyə qoşulduqda və ya onu tərk etdikdə sistem öz paylanmasını tənzimləyə bilər. Beləliklə, yüksək trafiklə əlavə serverlərin əlavə edilməsi üfüqi miqyaslamaya imkan verir.

    4. Brauzer uyğunluğu
    Bulud oyunları istifadəçilərdən minimum məbləğ tələb etdikdə ən yaxşısıdır. Bu o deməkdir ki, brauzerdə işləmək mümkündür. Brauzerlər istifadəçiləri proqram və avadanlıq quraşdırmaqdan xilas etməklə oyun təcrübəsini mümkün qədər rahat etməyə kömək edir. Brauzerlər həmçinin mobil və masa üstü versiyalar üçün çarpaz platforma təmin etməyə kömək edir. Xoşbəxtlikdən, WebRTC müxtəlif brauzerlərdə yaxşı dəstəklənir.

    5. Oyun interfeysinin və xidmətin aydın şəkildə ayrılması
    Mən bulud oyun xidmətinə platforma kimi baxıram. Hər kəs istənilən şeyi platformaya qoşmağı bacarmalıdır. İndi inteqrasiya etmişəm LibRetro bulud oyun xidməti ilə, çünki LibRetro SNES, GBA, PS kimi retro oyunlar üçün gözəl oyun emulyatoru interfeysi təklif edir.

    6. Çox oyunçu, izdiham oyunu və oyunla xarici əlaqə (dərin əlaqə) üçün otaqlar
    CloudRetro retro oyunlar üçün CrowdPlay və Onlayn MultiPlayer kimi bir çox yeni oyunu dəstəkləyir. Bir neçə istifadəçi eyni dərin keçidi müxtəlif kompüterlərdə açsa, onlar eyni oyunun işlədiyini görəcək və hətta ona qoşula biləcəklər.

    Üstəlik, oyun vəziyyətləri bulud yaddaşında saxlanılır. Bu, istifadəçilərə istənilən vaxt istənilən başqa cihazda oyunu davam etdirməyə imkan verir.

    7. Horizontal miqyaslama
    Bu gün hər hansı SAAS kimi, bulud oyunları da üfüqi olaraq miqyaslana bilən şəkildə tərtib edilməlidir. Koordinator-işçi dizaynı daha çox trafikə xidmət etmək üçün daha çox işçi əlavə etməyə imkan verir.

    8. Bir buludla bağlı deyil
    CloudRetro infrastrukturu müxtəlif bölgələr üçün müxtəlif bulud provayderləri (Digital Ocean, Alibaba, xüsusi provayder) tərəfindən yerləşdirilir. İnfrastruktur Docker konteynerində işləməyi aktivləşdirirəm və tək bulud provayderindən asılı olmamaq üçün şəbəkə parametrlərini bash skripti ilə konfiqurasiya edirəm. Bunu WebRTC-də NAT Traversal ilə birləşdirərək, biz CloudRetro-nu istənilən bulud platformasında və hətta istənilən istifadəçinin maşınında yerləşdirmək üçün çevikliyə malik ola bilərik.

    Memarlıq dizaynı

    İşçi: (və ya yuxarıda qeyd olunan axın serveri) oyunları çoxaldır, kodlaşdırma boru xəttini idarə edir və şifrələnmiş medianı istifadəçilərə ötürür. İşçi nümunələri bütün dünyada paylanır və hər bir işçi eyni anda birdən çox istifadəçi seansını idarə edə bilər.

    Koordinator: yeni istifadəçini ən uyğun axın işçisi ilə cütləşdirməyə cavabdehdir. Koordinator işçilərlə WebSocket vasitəsilə əlaqə saxlayır.

    Oyun vəziyyəti yaddaşı: bütün oyun dövlətləri üçün mərkəzi uzaqdan saxlama. Bu yaddaş uzaqdan saxlama/yükləmə kimi vacib funksiyaları təmin edir.

    WebRTC-də açıq mənbə bulud oyunu: p2p, multiplayer, sıfır gecikmə
    CloudRetro yüksək səviyyəli arxitektura

    Fərdi skript

    Aşağıdakı şəkildə göstərilən 1 və 2-ci addımlarda yeni istifadəçi CloudRetro-nu açdıqda, koordinatordan mövcud işçilərin siyahısı ilə birlikdə birinci səhifəyə sorğu göndərilir. Bundan sonra, 3-cü addımda müştəri HTTP ping sorğusundan istifadə edərək bütün namizədlər üçün gecikmələri hesablayır. Bu gecikmələrin siyahısı sonra koordinatora geri göndərilir ki, o, istifadəçiyə xidmət göstərəcək ən uyğun işçini təyin edə bilsin. Aşağıdakı 4-cü addım oyun yaradır. İstifadəçi ilə təyin edilmiş işçi arasında WebRTC axın əlaqəsi qurulur.
    WebRTC-də açıq mənbə bulud oyunu: p2p, multiplayer, sıfır gecikmə
    Giriş əldə etdikdən sonra fərdi skript

    İşçinin içində nə var

    Oyun və axın boru kəmərləri işçinin daxilində təcrid olunmuş şəkildə saxlanılır və interfeys vasitəsilə orada məlumat mübadiləsi aparır. Hazırda bu rabitə yaddaşda olan məlumatların üzərindən ötürülməsi yolu ilə həyata keçirilir golang kanalları eyni prosesdə. Növbəti məqsəd seqreqasiyadır, yəni. başqa bir prosesdə oyunun müstəqil işə salınması.

    WebRTC-də açıq mənbə bulud oyunu: p2p, multiplayer, sıfır gecikmə
    İşçi komponentlərinin qarşılıqlı əlaqəsi

    Əsas komponentlər:

    • WebRTC: istifadəçi girişini qəbul edən və kodlanmış medianı serverdən çıxaran müştəri komponenti.
    • Oyun emulyatoru: oyun komponenti. Libretro kitabxanası sayəsində sistem eyni proses daxilində oyunu idarə edə, media və daxiletmə axınını daxildən kəsə bilir.
    • Oyundaxili kadrlar çəkilir və kodlayıcıya göndərilir.
    • Şəkil/audio kodlayıcı: media çərçivələrini qəbul edən, onları fonda kodlayan və kodlaşdırılmış şəkilləri/audioları çıxaran kodlaşdırma kəməri.

    Tətbiq

    CloudRetro əsas texnologiya kimi WebRTC-yə güvənir, ona görə də Golang tətbiqinin təfərrüatlarına keçməzdən əvvəl WebRTC-nin özü haqqında danışmaq qərarına gəldim. Bu, ikinci saniyə gecikmə axınına nail olmaqda mənə çox kömək edən heyrətamiz bir texnologiya parçasıdır.

    WebRTC

    WebRTC sadə API-lərdən istifadə edərək yerli mobil proqramlar və brauzerlərdə yüksək keyfiyyətli peer-to-peer əlaqələri təmin etmək üçün nəzərdə tutulmuşdur.

    NAT keçidi

    WebRTC NAT Traversal funksionallığı ilə tanınır. WebRTC peer-to-peer ünsiyyəti üçün nəzərdə tutulmuşdur. Onun məqsədi NAT şlüzlərindən və firewalllarından qaçaraq ən uyğun birbaşa marşrutu tapmaqdır. ICE. Bu prosesin bir hissəsi kimi, WebRTC API-ləri STUN serverlərindən istifadə edərək ictimai IP ünvanınızı tapır və onu relay serverinə yönləndirir (Dönər) birbaşa əlaqə qurmaq mümkün olmadıqda.

    Bununla belə, CloudRetro bu imkandan tam istifadə etmir. Onun peer-to-peer əlaqələri istifadəçilər arasında deyil, istifadəçilər və bulud serverləri arasında mövcuddur. Modelin server tərəfində adi bir istifadəçi cihazı ilə müqayisədə birbaşa ünsiyyətdə daha az məhdudiyyət var. Bu, daxil olan portları əvvəlcədən açmağa və ya birbaşa ictimai IP ünvanlarından istifadə etməyə imkan verir, çünki server NAT-ın arxasında deyil.

    Əvvəllər layihəni Cloud Gaming üçün oyun paylama platformasına çevirmək istəyirdim. İdeya oyun yaradıcılarına oyunlar və axın resursları təqdim etməyə icazə vermək idi. Və istifadəçilər birbaşa provayderlərlə əlaqə quracaqlar. Bu qeyri-mərkəzləşdirilmiş şəkildə, CloudRetro sadəcə olaraq üçüncü tərəfin axın resurslarını istifadəçilərə birləşdirmək üçün bir vasitədir və bu, hostinq artıq ona asılmadıqda onu daha genişlənə bilir. Üçüncü tərəfin axın resurslarında peer-to-peer bağlantısının işə salınmasını asanlaşdırmaq üçün burada WebRTC NAT Traversal-ın rolu çox vacibdir ki, bu da yaradıcının şəbəkəyə qoşulmasını asanlaşdırır.

    Video sıxılma

    Video sıxılma boru kəmərinin əvəzsiz hissəsidir və axının hamarlığına böyük töhfə verir. VP8/H264 video kodlaşdırmasının bütün təfərrüatlarını bilmək lazım olmasa da, konsepsiyanı başa düşmək video axınının sürət parametrlərini başa düşməyə, gözlənilməz davranışı aradan qaldırmağa və gecikməni tənzimləməyə kömək edir.

    Axın xidməti üçün videonu sıxmaq çətindir, çünki alqoritm ümumi kodlaşdırma vaxtının + şəbəkə ötürmə vaxtının + deşifrə vaxtının mümkün qədər kiçik olmasını təmin etməlidir. Bundan əlavə, kodlaşdırma prosesi ardıcıl və davamlı olmalıdır. Kodlaşdırmada bəzi güzəştlər tətbiq edilmir - məsələn, biz daha kiçik fayl ölçüsü və deşifrləmə vaxtı ilə müqayisədə uzun kodlaşdırma vaxtına üstünlük verə bilmərik və ya uyğun olmayan sıxılmadan istifadə edə bilmərik.

    Video sıxılma ideyası istifadəçilər üçün məqbul sədaqət səviyyəsini qoruyarkən lazımsız məlumat bitlərini aradan qaldırmaqdır. Fərdi statik təsvir çərçivələrini kodlaşdırmaqla yanaşı, alqoritm cari çərçivəni əvvəlki və sonrakıdan çıxarır, ona görə də yalnız onların fərqi göndərilir. Pacman nümunəsindən göründüyü kimi, yalnız diferensial nöqtələr ötürülür.

    WebRTC-də açıq mənbə bulud oyunu: p2p, multiplayer, sıfır gecikmə
    Nümunə olaraq Pacman istifadə edərək video çərçivələrin müqayisəsi

    Audio sıxılma

    Eynilə, audio sıxılma alqoritmi insanlar tərəfindən qəbul edilə bilməyən məlumatları buraxır. Opus hazırda ən yaxşı performanslı audio kodekdir. O, RTP (Real Time Nəqliyyat Protokolu) kimi sifarişli dataqram protokolu üzərindən səs dalğasını ötürmək üçün nəzərdə tutulmuşdur. Onun gecikməsi mp3 və aac ilə müqayisədə daha azdır və keyfiyyəti daha yüksəkdir. Gecikmə adətən 5-66,5 ms-dir.

    Pion, Golanqda WebRTC

    Lombard WebRTC-ni Golanqa gətirən açıq mənbəli layihədir. Doğma C++ WebRTC kitabxanalarının adi sarılması əvəzinə, Pion daha yaxşı performans, Go inteqrasiyası və WebRTC protokollarında versiya nəzarəti ilə yerli Golang WebRTC tətbiqidir.

    Kitabxana həmçinin bir saniyədən az gecikmə ilə çoxlu böyük daxili modullarla axın məlumatlarını təmin edir. Onun öz STUN, DTLS, SCTP və s. tətbiqi var. və QUIC və WebAssembly ilə bəzi təcrübələr. Özlüyündə bu açıq mənbəli kitabxana əla sənədlər, şəbəkə protokolu tətbiqləri və gözəl nümunələrlə həqiqətən yaxşı öyrənmə mənbəyidir.

    Çox ehtiraslı bir yaradıcının rəhbərlik etdiyi Pion icması olduqca canlıdır və WebRTC haqqında çoxlu keyfiyyətli müzakirələrə malikdir. Bu texnologiya ilə maraqlanırsınızsa, buyurun http://pion.ly/slack - çox yeni şeylər öyrənəcəksiniz.

    Golanqda CloudRetro yazmaq

    WebRTC-də açıq mənbə bulud oyunu: p2p, multiplayer, sıfır gecikmə
    Go-da İşçi Tətbiqi

    Fəaliyyətdə olan kanallara keçin

    Go kanallarının gözəl dizaynı ilə hadisələrin ötürülməsi və paralellik məsələləri çox sadələşdirilmişdir. Diaqramda olduğu kimi, müxtəlif GoRoutines-də paralel işləyən bir neçə komponent var. Hər bir komponent öz vəziyyətini idarə edir və kanallar vasitəsilə əlaqə saxlayır. Qolanqın seçmə iddiası oyunda hər dəfə bir atom hadisəsinin işlənməsinə səbəb olur (oyun işarəsi). Bu o deməkdir ki, bu dizayn üçün heç bir bloklamaya ehtiyac yoxdur. Məsələn, istifadəçi saxlandıqda, tam oyun vəziyyətinin görüntüsü tələb olunur. Bu vəziyyət saxlama tamamlanana qədər daxil olmaqla davamlı olaraq qalmalıdır. Hər oyun işarəsi zamanı arxa uç yalnız saxlama və ya əməliyyata daxil ola bilər ki, bu da prosesi təhlükəsiz edir.

    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

    Bu Golang şablonu mənim CrowdPlay və Multiple Player istifadə vəziyyətim üçün əladır. Bu nümunəyə uyğun olaraq, eyni otaqdakı bütün istifadəçi girişləri mərkəzi giriş kanalına daxil edilir. Oyun mediası daha sonra eyni otaqdakı bütün istifadəçilərə yerləşdirilir. Bu yolla biz müxtəlif istifadəçilərin bir neçə oyun seansı arasında oyun vəziyyətinin bölünməsinə nail oluruq.

    WebRTC-də açıq mənbə bulud oyunu: p2p, multiplayer, sıfır gecikmə
    Müxtəlif seanslar arasında sinxronizasiya

    Golangun mənfi cəhətləri

    Golang mükəmməl deyil. Kanal yavaşdır. Bloklama ilə müqayisədə Go kanalı paralel və axın hadisələrini idarə etmək üçün sadəcə daha asan bir yoldur, lakin kanal ən yaxşı performansı təmin etmir. Kanalın altında mürəkkəb bloklama məntiqi var. Buna görə də, performansı optimallaşdırmaq üçün kanalları dəyişdirərkən kilidləri və atom dəyərlərini yenidən tətbiq etməklə tətbiqetmədə bəzi düzəlişlər etdim.

    Bundan əlavə, Golanqın zibil yığan maşını idarəolunmazdır, bu da bəzən şübhəli uzun fasilələrə səbəb olur. Bu, real vaxt rejimində yayım tətbiqinə böyük müdaxilə edir.

    COG

    Layihə medianın sıxılması üçün mövcud VP8/H264 açıq mənbəli Golang kitabxanasından və oyun emulyatorları üçün Libretrodan istifadə edir. Bu kitabxanaların hamısı Go istifadə edən C kitabxanası üçün sadəcə sarğılardır COG. Bəzi çatışmazlıqlar siyahıda verilmişdir bu yazı Dave Cheney. Qarşılaşdığım problemlər:

    • Golang RecoveryCrash ilə belə, CGO-da bir qəza tuta bilməmək;
    • CGO-da dənəvər problemləri aşkar edə bilmədiyimiz zaman performans darboğazını müəyyən edə bilməmək.

    Nəticə

    Bulud oyun xidmətlərini tapmaq və dostlarımla onlayn nostalji retro oyunları oynamağa kömək edən platforma yaratmaq məqsədimə nail oldum. Bu layihə Pion kitabxanası və Pion icmasının dəstəyi olmadan mümkün olmazdı. Mən onun intensiv inkişafına görə son dərəcə minnətdaram. WebRTC və Pion tərəfindən təmin edilən sadə API-lər qüsursuz inteqrasiyanı təmin etdi. Əvvəlcədən peer-to-peer (P2P) ünsiyyətindən xəbərsiz olmağıma baxmayaraq, mənim ilk konsepsiya sübutum eyni həftə buraxıldı.

    İnteqrasiya asanlığına baxmayaraq, P2P axını həqiqətən kompüter elmində çox mürəkkəb bir sahədir. Peer-to-peer sessiyası yaratmaq üçün IP və NAT kimi çoxillik şəbəkə arxitekturalarının mürəkkəbliyi ilə məşğul olmalıdır. Bu layihə üzərində işləyərkən mən şəbəkə və performansın optimallaşdırılması ilə bağlı çoxlu dəyərli biliklər toplamışam, ona görə də hər kəsə WebRTC-dən istifadə edərək P2P məhsulları yaratmağa cəhd etməyi tövsiyə edirəm.

    CloudRetro, bir retro oyunçu kimi gözlədiyim bütün istifadə hallarına cavab verir. Bununla belə, hesab edirəm ki, layihədə şəbəkəni daha etibarlı və performanslı etmək, daha keyfiyyətli oyun qrafikasını təmin etmək və ya istifadəçilər arasında oyunları paylaşmaq kimi təkmilləşdirə biləcəyim çoxlu sahələr var. Bunun üzərində çox çalışıram. Zəhmət olmasa izləyin layihə və onu bəyənirsinizsə, onu dəstəkləyin.

Mənbə: www.habr.com

Добавить комментарий