WebRTC жүйесінде ашық бастапқы бұлттық ойын: p2p, көп ойыншы, нөлдік кідіріс

WebRTC жүйесінде ашық бастапқы бұлттық ойын: p2p, көп ойыншы, нөлдік кідіріс
Бағдарламалық қамтамасыз ету қызмет ретінде, инфрақұрылым қызмет ретінде, платформа қызмет ретінде, коммуникациялық платформа қызмет ретінде, бейнеконференция қызмет ретінде, бұлттық ойындар қызмет ретінде ше? Google жақында іске қосқан Stadia сияқты бұлтты ойындарды (Cloud Gaming) жасауға бірнеше әрекет жасалды. Стадия WebRTC үшін жаңа емес, бірақ басқалар WebRTC-ті дәл осылай пайдалана алады ма?

Тан Нгуен бұл мүмкіндікті өзінің ашық бастапқы коды CloudRetro жобасында сынап көруді шешті. CloudRetro Pion негізінде жасалған, танымал Go негізіндегі WebRTC кітапханасы (рахмет Көрсетілген Pion әзірлеу тобынан осы мақаланы дайындауға көмектескені үшін). Бұл мақалада Танх өз жобасының архитектурасына шолу жасайды, сонымен қатар ол қандай пайдалы нәрселерді білгені және жұмыс барысында қандай қиындықтарға тап болғаны туралы әңгімелейді.

кіру

Өткен жылы Google Stadia-ны жариялағанда, бұл менің ойымды қалдырды. Идеяның бірегей және жаңашылдығы сонша, мен мұны бар технологиямен қалай жасауға болатынын үнемі ойладым. Бұл тақырыпты жақсырақ түсінуге деген ұмтылыс мені ашық бастапқы бұлттық ойынның өз нұсқасын жасауға итермеледі. Нәтиже жай ғана керемет болды. Төменде мен өз жылымның жұмыс процесімен бөліскім келеді жоба.

TLDR: маңызды жерлері бар қысқа слайд нұсқасы

Неліктен бұлтты ойын - бұл болашақ

Менің ойымша, бұлтты ойын жақын арада тек ойын ғана емес, сонымен қатар информатиканың басқа да салаларының келесі буынына айналады. Бұлтты ойын – клиент/сервер моделінің шыңы. Бұл модель қашықтағы серверде ойын логикасын орналастыру және кескіндерді/аудио ағынын клиентке жіберу арқылы серверлік басқаруды барынша арттырады және фронтондық жұмысты азайтады. Сервер күрделі өңдеуді орындайды, сондықтан клиент бұдан былай аппараттық шектеулерге ұшырамайды.

Google Stadia шын мәнінде ойнауға мүмкіндік береді AAA ойындары (яғни, жоғары деңгейлі блокбастер ойындары) YouTube сияқты интерфейсте. Дәл осындай әдістеме операциялық жүйе немесе 2D/3D графикалық дизайн және т.б. сияқты басқа ауыр офлайн қолданбаларға қолданылуы мүмкін. сондықтан біз оларды бірнеше платформалардағы төмен спецификациялы құрылғыларда дәйекті түрде іске қоса аламыз.

WebRTC жүйесінде ашық бастапқы бұлттық ойын: p2p, көп ойыншы, нөлдік кідіріс
Бұл технологияның болашағы: Microsoft Windows 10 Chrome браузерінде жұмыс істейтінін елестетіп көріңізші?

Бұлтты ойындар техникалық тұрғыдан қиын

Ойын - пайдаланушының тұрақты, жылдам жауап беруі қажет болатын сирек аймақтардың бірі. Егер бетті басқан кезде кейде 2 секундтық кешігуге тап болсақ, бұл қолайлы. Тікелей бейне ағындары әдетте бірнеше секундқа кешігіп қалады, бірақ бәрібір қолайлы пайдалану мүмкіндігін ұсынады. Дегенмен, ойын жиі 500 мс артта қалса, оны ойнату мүмкін емес. Біздің мақсатымыз - кіріс пен медиа арасындағы алшақтық мүмкіндігінше аз болуы үшін өте төмен кідіріске қол жеткізу. Сондықтан бейне ағынының дәстүрлі тәсілі мұнда қолданылмайды.

WebRTC жүйесінде ашық бастапқы бұлттық ойын: p2p, көп ойыншы, нөлдік кідіріс
Жалпы бұлттық ойын үлгісі

CloudRetro бастапқы коды ашық жоба

Мен бұлт ойынының сынақ үлгісін жасауды шештім, мұның бәрі желілік шектеулермен мүмкін болатынын білу үшін. Тұжырымдаманы дәлелдеу үшін мен Голанг тілін таңдадым, өйткені бұл мен ең жақсы білетін тіл болды және мен кейінірек ашқанымдай, көптеген басқа себептерге байланысты бұл іске асыруға өте қолайлы болды. Go қарапайым және өте тез дамиды; Go жүйесіндегі арналар көп ағынды басқару үшін тамаша.

Жоба CloudRetro.io ретро ойындарға арналған ашық бастапқы бұлттық ойын қызметі. Жобаның мақсаты - дәстүрлі ретро ойындарға ең ыңғайлы ойын тәжірибесін әкелу және көп ойыншыны қосу.
Жоба туралы толығырақ мына жерден біле аласыз: https://github.com/giongto35/cloud-game.

CloudRetro функционалдығы

CloudRetro бұлттық ойындардың күшін көрсету үшін ретро ойындарды пайдаланады. Бұл көптеген бірегей ойын тәжірибесін алуға мүмкіндік береді.

  • Ойынның тасымалдануы
    • Бетті ашқан кезде жылдам ойнату; жүктеу немесе орнату қажет емес
    • Мобильді браузерде жұмыс істейді, сондықтан оны іске қосу үшін ешқандай бағдарламалық құрал қажет емес

  • Ойын сеанстарын бірнеше құрылғыларда ортақ пайдалануға болады және келесі рет жүйеге кіргеніңіз үшін бұлтта сақталуы мүмкін
  • Ойынды ағынмен жіберуге болады немесе оны бірден бірнеше пайдаланушы ойнай алады:
    • TwitchPlayPokemon сияқты топтық ойын, тек кросс-платформа және нақты уақытта көбірек
    • Желіден тыс ойындар. Көптеген пайдаланушылар желіні орнатпай ойнай алады. Samurai Shodown ойынын енді CloudRetro желісі арқылы 2 ойыншы ойнай алады

    WebRTC жүйесінде ашық бастапқы бұлттық ойын: p2p, көп ойыншы, нөлдік кідіріс
    Әртүрлі құрылғылардағы онлайн көп ойыншы ойынының демо нұсқасы

    Инфрақұрылым

    Талаптар және технология стек

    Төменде мен жобаны бастамас бұрын қойған талаптардың тізімі берілген.

    1. Бір ойыншы
    Бұл талап мұнда тым маңызды немесе айқын көрінбеуі мүмкін, бірақ бұл менің негізгі ұсыныстарымның бірі, бұл бұлтты ойындарға дәстүрлі ағындық қызметтерден мүмкіндігінше алшақ тұруға мүмкіндік береді. Егер біз бір ойыншыға арналған ойынға назар аударатын болсақ, біз орталықтандырылған серверден немесе CDN-ден құтыла аламыз, өйткені біз бұқараға ағынмен жіберудің қажеті жоқ. Ағындарды раковина серверіне жүктеп салудың немесе орталықтандырылған WebSocket серверіне пакеттерді берудің орнына, қызмет ағындары пайдаланушыға тең дәрежелі WebRTC қосылымы арқылы тікелей жеткізіледі.

    2. Төмен кідіріс медиа ағыны
    Stadia туралы оқып отырып, мен кейбір мақалаларда айтылған WebRTC жиі көремін. Мен WebRTC тамаша технология екенін және бұлттық ойындарда қолдануға өте ыңғайлы екенін түсіндім. WebRTC – қарапайым API арқылы веб-шолғыштар мен мобильді қосымшаларды нақты уақыттағы байланыспен қамтамасыз ететін жоба. Ол тең дәрежелі қосылымды қамтамасыз етеді, медиа үшін оңтайландырылған және VP8 және H264 сияқты кіріктірілген стандартты кодектерге ие.

    Мен жоғары сапалы графиканы сақтаудан гөрі ең жақсы пайдаланушы тәжірибесін қамтамасыз етуге басымдық бердім. Кейбір жоғалтулар алгоритмде қолайлы. Google Stadia сервердегі кескін өлшемін кішірейтудің қосымша қадамы бар және кадрларды әріптестерге жібермес бұрын жоғарырақ сапаға дейін кеңейтеді.

    3. Географиялық маршрутизациясы бар бөлінген инфрақұрылым
    Қысу алгоритмі мен коды қаншалықты оңтайландырылғанына қарамастан, желі әлі де кідіріске ең көп ықпал ететін шешуші фактор болып табылады. Архитектурада айналу уақытын (RTT) қысқарту үшін пайдаланушыға ең жақын серверді жұптастыру механизмі болуы керек. Архитектурада 1 үйлестіруші және бүкіл әлем бойынша таратылған бірнеше ағындық сервер болуы керек: Батыс АҚШ, Шығыс АҚШ, Еуропа, Сингапур, Қытай. Барлық ағындық серверлер толығымен оқшауланған болуы керек. Сервер желіге қосылғанда немесе одан шыққанда жүйе оның таралуын реттей алады. Осылайша, үлкен трафикпен қосымша серверлерді қосу көлденең масштабтауға мүмкіндік береді.

    4. Браузердің үйлесімділігі
    Бұлттық ойын пайдаланушылардан ең аз талап етсе, ең жақсы болады. Бұл браузерде іске қосу мүмкіндігін білдіреді. Браузерлер ойын тәжірибесін пайдаланушылар үшін мүмкіндігінше ыңғайлы етіп, оларды бағдарламалық құрал мен аппараттық құралдарды орнатудан сақтайды. Сондай-ақ, шолғыштар мобильді және жұмыс үстелі нұсқалары арасында кросс-платформа функционалдығын қамтамасыз етуге көмектеседі. Бақытымызға орай, WebRTC әртүрлі браузерлерде жақсы қолдау көрсетеді.

    5. Ойын интерфейсі мен сервисін анық бөлу
    Мен бұлттық ойын қызметін платформа ретінде қарастырамын. Әр адам платформаға кез келген нәрсені қоса алуы керек. Енді мен интеграцияландым LibRetro бұлтты ойын қызметімен, өйткені LibRetro SNES, GBA, PS сияқты ретро ойындарға арналған әдемі ойын эмуляторы интерфейсін ұсынады.

    6. Көп ойыншыға, топпен ойнауға және ойынмен сыртқы байланыстыруға (терең байланыс) арналған бөлмелер
    CloudRetro ретро ойындарға арналған CrowdPlay және Online MultiPlayer сияқты көптеген жаңа геймплейлерді қолдайды. Егер бірнеше пайдаланушы әртүрлі компьютерлерде бірдей терең сілтемені ашса, олар бірдей іске қосылған ойынды көреді және тіпті оған қосыла алады.

    Сонымен қатар, ойын күйлері бұлттық қоймада сақталады. Бұл пайдаланушыларға кез келген уақытта кез келген басқа құрылғыда ойнауды жалғастыруға мүмкіндік береді.

    7. Көлденең масштабтау
    Қазіргі кездегі кез келген SAAS сияқты, бұлттық ойындар да көлденең масштабталатын етіп жасалуы керек. Үйлестіруші-жұмысшы дизайны көбірек трафикке қызмет көрсету үшін көбірек жұмысшыларды қосуға мүмкіндік береді.

    8. Бір бұлтпен байланыс жоқ
    CloudRetro инфрақұрылымы әртүрлі аймақтарға арналған әртүрлі бұлттық провайдерлерде (Digital Ocean, Alibaba, пайдаланушы провайдері) орналастырылған. Мен инфрақұрылымға арналған Docker контейнерінде іске қосуды қосамын және жалғыз бұлт провайдерінде құлыпталмағанын болдырмау үшін bash сценарийін пайдаланып желі параметрлерін конфигурациялаймын. Мұны WebRTC жүйесіндегі NAT Traversal қызметімен біріктіру арқылы біз CloudRetro қолданбасын кез келген бұлттық платформада және тіпті кез келген пайдаланушының машиналарында орналастыру икемділігіне ие бола аламыз.

    Архитектуралық дизайн

    Жұмысшы: (немесе жоғарыда аталған ағындық сервер) ойындарды көбейтеді, кодтау құбырын іске қосады және кодталған медианы пайдаланушыларға жібереді. Жұмысшы даналары бүкіл әлем бойынша таратылады және әрбір жұмысшы бірнеше пайдаланушы сеанстарын бір уақытта басқара алады.

    Үйлестіруші: жаңа пайдаланушыны ағынмен жіберу үшін ең қолайлы жұмысшымен жұптастыруға жауапты. Үйлестіруші жұмысшылармен WebSocket арқылы өзара әрекеттеседі.

    Ойын күйін сақтау: барлық ойын күйлері үшін орталық қашықтан сақтау орны. Бұл жад қашықтан сақтау/жүктеу сияқты маңызды функцияларды қамтамасыз етеді.

    WebRTC жүйесінде ашық бастапқы бұлттық ойын: p2p, көп ойыншы, нөлдік кідіріс
    CloudRetro жоғары деңгейлі архитектурасы

    Теңшелетін сценарий

    Төмендегі суретте көрсетілген 1 және 2-қадамдарда жаңа пайдаланушы CloudRetro қолданбасын ашқанда, үйлестіруші және қолжетімді жұмысшылар тізімі бірінші бетке сұралады. Осыдан кейін, 3-қадамда клиент HTTP пинг сұрауы арқылы барлық үміткерлер үшін кідірістерді есептейді. Бұл кешігулер тізімі кейін үйлестірушіге қайта жіберіледі, сонда ол пайдаланушыға қызмет көрсету үшін ең қолайлы жұмысшыны анықтай алады. Төмендегі 4-қадам ойынды жасайды. Пайдаланушы мен тағайындалған жұмысшы арасында WebRTC ағынды байланыс орнатылады.
    WebRTC жүйесінде ашық бастапқы бұлттық ойын: p2p, көп ойыншы, нөлдік кідіріс
    Пайдаланушы сценарийі рұқсат алғаннан кейін

    Жұмысшының ішінде не бар

    Ойын және ағынды құбырлар жұмысшының ішінде оқшау сақталады және интерфейс арқылы ақпарат алмасады. Қазіргі уақытта бұл байланыс жадтағы деректерді беру арқылы жүзеге асырылады Голанг арналары сол процесте. Келесі мақсат - сегрегация, яғни. ойынды басқа процесте тәуелсіз іске қосу.

    WebRTC жүйесінде ашық бастапқы бұлттық ойын: p2p, көп ойыншы, нөлдік кідіріс
    Жұмысшы компоненттерінің өзара әрекеттесуі

    Негізгі компоненттер:

    • WebRTC: пайдаланушы енгізуін қабылдайтын және серверден кодталған медианы шығаратын клиент құрамдас бөлігі.
    • Ойын эмуляторы: ойын компоненті. Libretro кітапханасының арқасында жүйе ойынды бір процесс ішінде іске қосып, медиа мен кіріс ағынын іштей ұстай алады.
    • Ойын ішіндегі кадрлар түсіріліп, кодтаушыға жіберіледі.
    • Сурет/аудио кодтаушы: медиа кадрларын алатын, оларды фондық режимде кодтайтын және кодталған кескіндерді/дыбыстарды шығаратын кодтау құбыры.

    Реализация

    CloudRetro өзінің негізгі технологиясы ретінде WebRTC-ге сүйенеді, сондықтан Голангты енгізудің егжей-тегжейлерімен таныспас бұрын, мен WebRTC-тің өзі туралы айтуды шештім. Бұл деректерді ағынмен жіберу үшін екінші секундтық кідіріске қол жеткізуге көмектескен керемет технология.

    WebRTC

    WebRTC қарапайым API интерфейстерін пайдалана отырып, жергілікті мобильді қолданбалар мен шолғыштарда жоғары сапалы тең дәрежелі қосылымдарды қамтамасыз етуге арналған.

    NAT өту

    WebRTC өзінің NAT Traversal функциясымен танымал. WebRTC тең дәрежелі байланысқа арналған. Оның мақсаты - NAT шлюздері мен брандмауэрді болдырмай, ең қолайлы тікелей бағытты табу. ICE. Осы процестің бөлігі ретінде WebRTC API интерфейстері STUN серверлерін пайдаланып жалпы IP мекенжайыңызды тауып, оны релелік серверге жібереді (ҰСТАУ) тікелей байланыс орнату мүмкін болмаған кезде.

    Дегенмен, CloudRetro бұл мүмкіндікті толық пайдаланбайды. Оның тең дәрежелі байланыстары пайдаланушылар арасында емес, пайдаланушылар мен бұлттық серверлер арасында болады. Модельдің сервер жағында әдеттегі пайдаланушы құрылғысына қарағанда тікелей байланысқа шектеулер азырақ. Бұл кіріс порттарын алдын ала ашуға немесе жалпыға ортақ IP мекенжайларын тікелей пайдалануға мүмкіндік береді, себебі сервер NAT-тан кейін емес.

    Бұрын мен жобаны Cloud Gaming үшін ойын тарату платформасына айналдырғым келді. Ойын жасаушыларға ойындар мен ағындық ресурстарды ұсынуға мүмкіндік беру идеясы болды. Ал пайдаланушылар провайдерлермен тікелей араласады. Бұл орталықтандырылмаған түрде, CloudRetro үшінші тарап ағындық ресурстарын пайдаланушыларға қосуға арналған негіз болып табылады, ол енді орналастырылмаған кезде оны кеңейтуге мүмкіндік береді. Мұнда WebRTC NAT Traversal рөлі үшінші тараптың ағындық ресурстарында тең дәрежелі қосылымды инициализациялауды жеңілдету үшін өте маңызды, бұл жасаушының желіге қосылуын жеңілдетеді.

    Бейнені қысу

    Бейнені қысу құбырдың ажырамас бөлігі болып табылады және біркелкі ағынға үлкен үлес қосады. VP8/H264 бейне кодтауының әрбір егжей-тегжейін білу қажет болмаса да, тұжырымдамаларды түсіну ағынды бейне жылдамдығы опцияларын түсінуге, күтпеген әрекетті жөндеуге және кідірісті реттеуге көмектеседі.

    Ағындық қызмет үшін бейнені қысу қиын, себебі алгоритм жалпы кодтау уақыты + желіні жіберу уақыты + декодтау уақыты мүмкіндігінше аз болуын қамтамасыз етуі керек. Сонымен қатар, кодтау процесі дәйекті және үздіксіз болуы керек. Кейбір кодтау айырбастары қолданылмайды — мысалы, кішірек файл өлшемдері мен декодтау уақыттарына қарағанда біз ұзақ кодтау уақытын таңдай алмаймыз немесе сәйкес келмейтін қысуды пайдалана алмаймыз.

    Бейнені сығудың идеясы пайдаланушылар үшін қолайлы дәлдік деңгейін сақтай отырып, қажет емес ақпарат биттерін жою болып табылады. Жеке статикалық кескін кадрларын кодтаумен қатар, алгоритм ағымдағы кадрды алдыңғы және келесілерден шығарады, сондықтан олардың айырмашылығы ғана жіберіледі. Pacman-мен мысалдан көрініп тұрғандай, тек дифференциалдық нүктелер беріледі.

    WebRTC жүйесінде ашық бастапқы бұлттық ойын: p2p, көп ойыншы, нөлдік кідіріс
    Мысал ретінде Pacman көмегімен бейне кадрларды салыстыру

    Аудио қысу

    Сол сияқты, дыбысты қысу алгоритмі адамдар қабылдай алмайтын деректерді өткізіп жібереді. Opus қазіргі уақытта ең жақсы жұмыс істейтін аудио кодек болып табылады. Ол RTP (нақты уақыттағы тасымалдау протоколы) сияқты реттелген датаграмма протоколы арқылы дыбыстық толқынды жіберуге арналған. Оның кешігуі mp3 және aac қарағанда төмен, ал сапасы жоғары. Кідіріс әдетте 5~66,5 мс шамасында болады.

    Пион, Голангтағы WebRTC

    Пион WebRTC-ті Голангқа әкелетін ашық бастапқы жоба. Жергілікті C++ WebRTC кітапханаларының әдеттегі орауының орнына, Pion - WebRTC протоколдарындағы өнімділігі, Go интеграциясы және нұсқаларды басқаруы жақсы WebRTC-тің жергілікті Голанг іске асыруы.

    Кітапхана сонымен қатар секундтық кідіріспен көптеген тамаша кірістірілген ағынмен жіберуге мүмкіндік береді. Оның STUN, DTLS, SCTP және т.б. өзіндік іске асыруы бар. және QUIC және WebAssembly көмегімен кейбір тәжірибелер. Бұл ашық бастапқы кітапхананың өзі тамаша құжаттамасы, желілік протоколды іске асыруы және керемет мысалдары бар шынымен жақсы оқу ресурсы болып табылады.

    Өте құмар автор басқаратын Pion қауымдастығы өте белсенді және WebRTC туралы көптеген сапалы талқылаулар жүріп жатыр. Егер сізді осы технология қызықтырса, қосылыңыз http://pion.ly/slack – сіз көп жаңа нәрселерді үйренесіз.

    Голанг тілінде CloudRetro жазу

    WebRTC жүйесінде ашық бастапқы бұлттық ойын: p2p, көп ойыншы, нөлдік кідіріс
    Go-дағы жұмысшының іске асырылуы

    Арналар әрекетте

    Go арнасының әдемі дизайнының арқасында оқиғалар ағыны мен параллельділік мәселелері айтарлықтай жеңілдетілді. Диаграммадағыдай, әртүрлі GoRoutines параллель жұмыс істейтін бірнеше құрамдастарға ие. Әрбір компонент өз күйін басқарады және арналар арқылы байланысады. Голангтың селективті бекітуі ойында әр уақытта бір атомдық оқиғаны өңдеуге мәжбүр етеді (ойын белгісі). Бұл бұл дизайн үшін құлыптау қажет емес дегенді білдіреді. Мысалы, пайдаланушы сақтаған кезде ойын күйінің толық суреті қажет. Бұл күй сақтау аяқталғанша жүйеге кіріп, үздіксіз болуы керек. Әрбір ойын белгісі кезінде сервер процесс ағынын қауіпсіз ете отырып, тек сақтау немесе енгізу әрекетін орындай алады.

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

    Желдеткіш кіріс/фан-шығу

    Бұл Голанг үлгісі менің CrowdPlay және Multiple Player пайдалану жағдайыма өте сәйкес келеді. Осы үлгі бойынша бір бөлмедегі барлық пайдаланушы кірістері орталық кіру арнасына салынған. Содан кейін ойын медиасы бір бөлмедегі барлық пайдаланушыларға таратылады. Осылайша, біз әртүрлі пайдаланушылардың бірнеше ойын сеанстары арасында ойын күйін бөлуге қол жеткіземіз.

    WebRTC жүйесінде ашық бастапқы бұлттық ойын: p2p, көп ойыншы, нөлдік кідіріс
    Әртүрлі сеанстар арасындағы синхрондау

    Голангтың кемшіліктері

    Голанг мінсіз емес. Арна баяу. Бұғаттаумен салыстырғанда Go арнасы бір уақыттағы және ағынды оқиғаларды өңдеудің оңай жолы болып табылады, бірақ арна ең жақсы өнімділікті қамтамасыз етпейді. Арнаның астында күрделі блоктау логикасы бар. Сондықтан мен өнімділікті оңтайландыру үшін арналарды ауыстырған кезде құлыптар мен атомдық мәндерді қайта қолданып, іске асыруға кейбір түзетулер енгіздім.

    Сонымен қатар, Голангтағы қоқыс жинағыш басқарылмайды, бұл кейде күдікті ұзақ үзілістерді тудырады. Бұл нақты уақыттағы ағындық қолданбаға үлкен кедергі жасайды.

    COG

    Жоба медиа қысу үшін бар ашық бастапқы Golang VP8/H264 кітапханасын және ойын эмуляторлары үшін Libretro пайдаланады. Бұл кітапханалардың барлығы Go қолданбасындағы C кітапханасының жай ғана орауыштары COG. Кейбір кемшіліктер тізімде көрсетілген Дэйв Чейнидің бұл жазбасы. Мен кездескен мәселелер:

    • Golang RecoveryCrash болса да, CGO-да апатты ұстай алмау;
    • CGO-дағы егжей-тегжейлі мәселелерді анықтай алмаған кезде өнімділік кедергілерін анықтау мүмкін емес.

    қорытынды

    Мен бұлттық ойын қызметтерін түсіну және достарыммен желіде ностальгиялық ретро ойындарын ойнауға көмектесетін платформа құру мақсатына жеттім. Бұл жоба Пион кітапханасы мен Пион қауымдастығының қолдауынсыз мүмкін болмас еді. Мен оның қарқынды дамуы үшін өте ризамын. WebRTC және Pion ұсынған қарапайым API интерфейстері үздіксіз интеграцияны қамтамасыз етті. Тұжырымдаманың алғашқы дәлелі сол аптада шығарылды, тіпті мен теңдесімен (P2P) байланыс туралы алдын ала білімім болмаса да.

    Интеграцияның қарапайымдылығына қарамастан, P2P ағыны информатикадағы өте күрделі сала болып табылады. Тең-теңімен сеанс жасау үшін ол IP және NAT сияқты ұзақ уақыт бойы жұмыс істейтін желі архитектураларының күрделілігімен айналысуы керек. Осы жобада жұмыс істеу барысында мен желіні құру және өнімділікті оңтайландыру туралы көптеген құнды білім алдым, сондықтан мен барлығын WebRTC арқылы P2P өнімдерін жасап көруге шақырамын.

    CloudRetro ретро ойыншы ретінде менің көзқарасым бойынша күткен барлық пайдалану жағдайларын қамтамасыз етеді. Дегенмен, менің ойымша, жобада мен жетілдіре алатын көптеген салалар бар, мысалы, желіні сенімдірек және өнімді ету, жоғары сапалы ойын графикасын қамтамасыз ету немесе пайдаланушылар арасында ойындарды бөлісу мүмкіндігі. Мен бұл үшін көп жұмыс істеймін. Өтінемін, орындаңыз жоба және ұнаса қолдау көрсетіңіз.

Ақпарат көзі: www.habr.com

пікір қалдыру