WebRTCде ачык булак булут оюну: p2p, көп оюнчу, нөл күтүү

WebRTCде ачык булак булут оюну: p2p, көп оюнчу, нөл күтүү
Кызмат катары программалык камсыздоо, сервис катары инфраструктура, сервис катары платформа, кызмат катары коммуникация платформасы, кызмат катары видеоконференция, кызмат катары булут оюндары жөнүндө эмне айтууга болот? Google жакында ишке киргизген Stadia сыяктуу булут оюндарын (Cloud Gaming) түзүүгө буга чейин бир нече аракеттер болгон. Stadia WebRTC үчүн жаңы эмес, бирок башкалар WebRTCди ушундай эле колдоно алабы?

Тан Нгуен бул мүмкүнчүлүктү өзүнүн ачык булактуу CloudRetro долбоорунда сынап көрүүнү чечти. CloudRetro Pion негизделген, элдик Go негизделген WebRTC китепканасы (рахмат Көрсөтүлдү Бул макаланы даярдоодо көрсөткөн жардамы үчүн Pion өнүктүрүү тобунан). Бул макалада Thanh өзүнүн долбоорунун архитектурасына сереп салып берет, ошондой эле ал кандай пайдалуу нерселерди үйрөнгөндүгү жана иш учурунда кандай кыйынчылыктарга дуушар болгону жөнүндө айтып берет.

кирүү

Өткөн жылы Google Stadiaны жарыялаганда, бул менин оюмду бузду. Идея ушунчалык уникалдуу жана инновациялык болгондуктан, мен буга чейин болгон технология менен кантип мүмкүн болгонуна дайыма таң калчумун. Бул теманы жакшыраак түшүнүү каалоом мени ачык булак булут оюнунун өз версиясын түзүүгө түрткү берди. Натыйжа жөн эле фантастикалык болду. Төмөндө мен өз жылым боюнча иштөө процесси менен бөлүшкүм келет долбоор.

TLDR: кыскача слайд версиясы, өзгөчөлүктөр менен

Эмне үчүн булут оюндары - бул келечек

Cloud Gaming жакында оюндун гана эмес, компьютер илиминин башка тармактарынын кийинки мууну болуп калат деп ишенем. Булуттагы оюн - бул кардар/сервер моделинин туу чокусу. Бул модель алыскы серверде оюн логикасын жайгаштыруу жана кардарга сүрөттөрдү/аудио агымын берүү аркылуу бэкенддерди башкарууну максималдуу кылат жана фронтондук ишти азайтат. Сервер оор процесстерди жасайт, ошондуктан кардар аппараттык чектөөлөрдөн арылбайт.

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 сыяктуу Crowdplay, көбүрөөк кросс-платформа жана реалдуу убакыт режиминде гана
    • Оффлайн оюндар онлайн. Көп колдонуучулар тармакты орнотпостон ойной алышат. 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 Traversal

    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 колдонуп видео жээкчелерин салыштыруу

    Аудио кысуу

    Ошо сыяктуу эле, аудио кысуу алгоритми адамдар тарабынан кабыл алынбай турган маалыматтарды өткөрүп жиберет. Опус учурда эң мыкты иштеген аудио кодек болуп саналат. Ал RTP (Real Time Transport Protocol) сыяктуу заказ кылынган датаграмма протоколу аркылуу аудио толкунду өткөрүү үчүн иштелип чыккан. Анын кечигүү убактысы 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 каналынын кооз дизайнынын аркасында окуяларды агым жана параллелдүүлүк көйгөйлөрү абдан жөнөкөйлөштүрүлгөн. Диаграммадагыдай, ар кандай 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
    	}
        }
    }

    Fan-in/Fan-out

    Бул Голанг үлгүсү менин 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 ретро оюнчусу катары мен күткөн бардык колдонуу учурларын камтыйт. Бирок, мен долбоордо мен өркүндөтө турган көптөгөн чөйрөлөр бар деп ойлойм, мисалы, тармакты ишенимдүү жана натыйжалуу кылуу, жогорку сапаттагы оюн графикасын камсыз кылуу же колдонуучулардын ортосунда оюндарды бөлүшүү. Мен бул боюнча талыкпай иштеп жатам. Сураныч, ээрчи долбоор жана эгер сизге жакса колдоп бериңиз.

Source: www.habr.com

Комментарий кошуу