Бозии абрии кушодаасос дар WebRTC: p2p, мултипликатор, таъхири сифр

Бозии абрии кушодаасос дар WebRTC: p2p, мултипликатор, таъхири сифр
Нармафзор ҳамчун хидмат, инфрасохтор ҳамчун хидмат, платформа ҳамчун хидмат, платформаи коммуникатсионӣ ҳамчун хидмат, видеоконфронс ҳамчун хидмат, дар бораи бозии абрӣ ҳамчун хидмат чӣ гуфтан мумкин аст? Аллакай якчанд кӯшишҳо барои эҷоди бозии абрӣ (Cloud Gaming), ба монанди Stadia, ки ба наздикӣ аз ҷониби Google оғоз шудааст, вуҷуд доранд. Стадия барои WebRTC нав нест, аммо оё дигарон метавонанд WebRTC-ро ҳамин тавр истифода баранд?

Тан Нгуен тасмим гирифт, ки ин имкониятро дар лоиҳаи кушодаи CloudRetro худ санҷад. CloudRetro ба Pion асос ёфтааст, маъмул Китобхонаи WebRTC дар асоси Go (ташаккур Нишон дода шудааст аз дастаи таҳияи Pion барои кӯмак дар таҳияи ин мақола). Дар ин мақола, Танҳ шарҳи меъмории лоиҳаи худро пешниҳод мекунад ва инчунин дар бораи он, ки чӣ чизҳои муфидро омӯхтааст ва дар давоми кор бо чӣ мушкилот дучор шудааст, нақл мекунад.

даромад

Соли гузашта, вақте ки Google Stadia-ро эълон кард, он маро ба ҳайрат овард. Ин идея он қадар беназир ва навоварона аст, ки ман ҳамеша дар ҳайрат будам, ки чӣ гуна ин ҳатто бо технологияи мавҷуда имконпазир аст. Хоҳиши беҳтар фаҳмидани ин мавзӯъ маро водор кард, ки версияи шахсии бозии абрии кушодаасосро созам. Натиҷа танҳо афсонавӣ буд. Дар зер ман мехостам дар бораи рафти кор дар соли худ мубодила кунам лоиҳа.

TLDR: версияи слайди кӯтоҳ бо нуктаҳои барҷаста

Чаро бозии абрӣ оянда аст

Ман боварӣ дорам, ки Cloud Gaming ба зудӣ насли навбатии на танҳо бозӣ, балки дигар соҳаҳои илми информатика хоҳад шуд. Бозии абрӣ қуллаи модели муштарӣ/сервер мебошад. Ин модел идоракунии пуштибониро ба ҳадди аксар мерасонад ва кори фронтиро тавассути ҷойгир кардани мантиқи бозӣ дар сервери дурдаст ва интиқоли тасвирҳо/аудио ба муштарӣ кам мекунад. Сервер коркарди вазнинро иҷро мекунад, то мизоҷ дигар дар раҳми маҳдудиятҳои сахтафзор набошад.

Google Stadia аслан ба шумо имкон медиҳад бозӣ кунед Бозиҳои AAA (яъне бозиҳои блокбастерҳои баландсифат) дар интерфейси монанди YouTube. Ҳамин методологияро метавон ба дигар барномаҳои вазнини офлайнӣ, аз қабили системаи оператсионӣ ё тарроҳии графикии 2D/3D ва ғайра татбиқ кард. то ки мо метавонем онҳоро пайваста дар дастгоҳҳои пастсифат дар платформаҳои гуногун иҷро кунем.

Бозии абрии кушодаасос дар WebRTC: p2p, мултипликатор, таъхири сифр
Ояндаи ин технология: Тасаввур кунед, ки оё Microsoft Windows 10 дар браузери Chrome кор мекард?

Бозии абрӣ аз ҷиҳати техникӣ душвор аст

Бозӣ яке аз он соҳаҳои нодир аст, ки дар он вокуниши доимии корбар зуд талаб карда мешавад. Агар мо баъзан ҳангоми клик кардани саҳифа ба таъхири 2 сония дучор шавем, ин қобили қабул аст. Ҷараёни видеои мустақим одатан чанд сония ақиб мемонад, аммо ба ҳар ҳол қобилияти оқилона пешниҳод мекунад. Аммо, агар бозӣ аксар вақт аз 500 мс ақиб ояд, он танҳо ғайриимкон аст. Ҳадафи мо ин ноил шудан ба таъхири бениҳоят паст аст, то фосила байни воридот ва васоити ахбори омма то ҳадди имкон камтар бошад. Аз ин рӯ, дар ин ҷо равиши анъанавӣ ба ҷараёни видео татбиқ карда намешавад.

Бозии абрии кушодаасос дар WebRTC: p2p, мултипликатор, таъхири сифр
Шаблони умумии бозии абрӣ

Лоиҳаи кушодаасос CloudRetro

Ман тасмим гирифтам, ки намунаи санҷишии бозии абриро эҷод кунам, то бубинам, ки оё ҳамаи ин бо чунин маҳдудиятҳои қатъии шабака имконпазир аст. Ман Голангро барои исботи консепсия интихоб кардам, зеро он забоне буд, ки ман бо он бештар ошно будам ва бо бисёр сабабҳои дигар барои ин татбиқ хеле мувофиқ буд, чунон ки баъдтар кашф кардам. Гузаштан оддӣ аст ва хеле зуд инкишоф меёбад; Каналҳо дар Go барои идоракунии мултимедиявӣ бузурганд.

Лоиҳа CloudRetro.io як хидмати бозии абрии кушодаасос барои бозиҳои ретро мебошад. Ҳадафи лоиҳа ин овардани таҷрибаи бароҳаттарини бозӣ ба бозиҳои анъанавии ретро ва илова кардани мултипликатор мебошад.
Шумо метавонед бештар дар бораи лоиҳа дар инҷо маълумот гиред: https://github.com/giongto35/cloud-game.

Функсияи CloudRetro

CloudRetro барои нишон додани қудрати бозии абрӣ бозиҳои ретро истифода мебарад. Ин ба шумо имкон медиҳад, ки таҷрибаҳои беназири бозиро ба даст оред.

  • Интиқолпазирии бозӣ
    • Бозии фаврӣ ҳангоми кушодани саҳифа; зеркашӣ ё насб лозим нест
    • Дар браузери мобилӣ кор мекунад, бинобар ин барои иҷро кардани он ягон нармафзор лозим нест

  • Сеансҳои бозӣ метавонанд дар якчанд дастгоҳҳо мубодила карда шаванд ва барои дафъаи оянда ворид шуданатон дар абр нигоҳ дошта шаванд
  • Бозиро метавон ҷараён дод, ё онро дар як вақт якчанд корбар бозӣ кардан мумкин аст:
    • Crowdplay ба монанди TwitchPlayPokemon, танҳо бештар кросс-платформа ва вақти воқеӣ
    • Бозиҳои офлайнӣ онлайн. Бисёре аз корбарон метавонанд бидуни насб кардани шабака бозӣ кунанд. Samurai Shodown ҳоло метавонад аз ҷониби 2 бозигар тавассути шабакаи CloudRetro бозӣ кунад

    Бозии абрии кушодаасос дар 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 танзим мекунам, то дар як провайдери абрӣ баста нашавед. Бо омезиши ин бо NAT Traversal дар WebRTC, мо метавонем чандирии ҷойгиркунии CloudRetro-ро дар ҳама платформаи абрӣ ва ҳатто дар ҳама мошинҳои корбар дошта бошем.

    Тарҳрезии меъморӣ

    Коргар: (ё сервери ҷараёнҳои дар боло зикршуда) бозиҳоро зиёд мекунад, лӯлаи рамзгузориро иҷро мекунад ва медиаи рамзгузорро ба корбарон интиқол медиҳад. Намунаҳои коргарӣ дар саросари ҷаҳон паҳн карда мешаванд ва ҳар як коргар метавонад дар як вақт сеансҳои сершумори корбаронро идора кунад.

    Ҳамоҳангсоз: барои ҷуфт кардани корбари нав бо коргари мувофиқтарин барои ҷараён масъул аст. Ҳамоҳангсоз бо коргарон тавассути WebSocket муошират мекунад.

    Нигоҳдории ҳолати бозӣ: нигаҳдории марказии дурдаст барои ҳама давлатҳои бозӣ. Ин нигаҳдорӣ вазифаҳои муҳимро ба монанди захира кардан/боркунии дурдаст таъмин мекунад.

    Бозии абрии кушодаасос дар WebRTC: p2p, мултипликатор, таъхири сифр
    Меъмории сатҳи болоии CloudRetro

    Скрипти фармоишӣ

    Вақте ки корбари нав CloudRetro-ро дар қадамҳои 1 ва 2, ки дар расми зер нишон дода шудааст, мекушояд, ҳамоҳангсоз бо рӯйхати коргарони дастрас ба саҳифаи аввал дархост карда мешавад. Пас аз ин, дар қадами 3 муштарӣ бо истифода аз дархости ping HTTP таъхирҳоро барои ҳамаи номзадҳо ҳисоб мекунад. Ин рӯйхати таъхирҳо пас аз он ба ҳамоҳангсоз баргардонида мешавад, то ӯ тавонад коргари мувофиқтаринро барои хидматрасонӣ ба корбар муайян кунад. Қадами 4 дар зер бозӣ эҷод мекунад. Байни корбар ва коргари таъиншуда пайвасти ҷараёни WebRTC муқаррар карда мешавад.
    Бозии абрии кушодаасос дар WebRTC: p2p, мултипликатор, таъхири сифр
    Скрипти корбар пас аз дастрас шудан

    Дар дохили коргар чӣ ҳаст

    Қубурҳои бозӣ ва ҷараён дар дохили коргар дар алоҳидагӣ нигоҳ дошта мешаванд ва дар он ҷо тавассути интерфейс маълумот мубодила мекунанд. Дар айни замон, ин алоқа тавассути интиқоли маълумот дар хотира тавассути тавассути Каналҳои Голанг дар ҳамон раванд. Ҳадафи навбатӣ сегрегатсия аст, яъне. оғози мустақили бозӣ дар раванди дигар.

    Бозии абрии кушодаасос дар WebRTC: p2p, мултипликатор, таъхири сифр
    Таъсири мутақобилаи ҷузъҳои коргар

    Компонентҳои асосӣ:

    • WebRTC: як ҷузъи муштарӣ, ки вуруди корбарро қабул мекунад ва медиаи рамзшударо аз сервер мебарорад.
    • Эмулятори бозӣ: ҷузъи бозӣ. Бо шарофати китобхонаи Libretro, система қодир аст, ки бозиро дар дохили як раванд иҷро кунад ва дар дохили медиа ва ҷараёни вурудро боздорад.
    • Фреймҳои дар бозӣ гирифташуда ба рамзгузор фиристода мешаванд.
    • Рамзгузори тасвир/аудио: лӯлаи рамзгузорие, ки чаҳорчӯбаҳои медиаро мегирад, онҳоро дар замина рамзгузорӣ мекунад ва тасвирҳо/аудиои рамзгузорро мебарорад.

    Реализация

    CloudRetro ба WebRTC ҳамчун технологияи асосиаш такя мекунад, аз ин рӯ пеш аз ғарқ шудан ба тафсилоти татбиқи Голанг, ман қарор додам, ки дар бораи худи WebRTC сӯҳбат кунам. Ин технологияи аҷибест, ки ба ман дар ноил шудан ба таъхири дуюмдараҷа барои ҷараён додани маълумот кӯмак кард.

    WebRTC

    WebRTC тарҳрезӣ шудааст, ки пайвастагиҳои баландсифати ҳамсол ба ҳамсол дар барномаҳои мобилӣ ва браузерҳои маҳаллӣ бо истифода аз API-ҳои оддӣ таъмин карда шавад.

    NAT Traversal

    WebRTC бо функсияи NAT Traversal маълум аст. WebRTC барои муоширати ҳамсол ба ҳамсол тарҳрезӣ шудааст. Ҳадафи он дарёфти масири мустақими мувофиқтарин, канорагирӣ аз шлюзҳои NAT ва деворҳо барои иртиботи ҳамсол ба ҳамсол тавассути раванде мебошад. ях. Ҳамчун як қисми ин раванд, API-ҳои WebRTC суроғаи IP-и ҷамъиятии шуморо бо истифода аз серверҳои STUN пайдо мекунанд ва онро ба сервери реле ирсол мекунанд (Гардиш) вакте ки алокаи бевосита мукаррар карда намешавад.

    Аммо, CloudRetro аз ин хусусият пурра истифода намебарад. Пайвастҳои ҳамсол ба ҳамсол ба он на дар байни корбарон, балки байни корбарон ва серверҳои абрӣ вуҷуд доранд. Ҷониби сервери модел нисбат ба дастгоҳи маъмулии корбар маҳдудиятҳои мустақими иртиботи камтар дорад. Ин ба шумо имкон медиҳад, ки портҳои воридшударо пешакӣ кушоед ё суроғаҳои IP-и умумиро мустақиман истифода баред, зеро сервер дар паси NAT нест.

    Қаблан ман мехостам лоиҳаро ба платформаи паҳнкунии бозӣ барои Cloud Gaming табдил диҳам. Идеяи он буд, ки ба созандагони бозӣ иҷозат диҳанд, ки бозиҳо ва захираҳои ҷараёнро таъмин кунанд. Ва корбарон мустақиман бо провайдерҳо муошират мекарданд. Бо ин тарзи ғайримарказонидашуда, CloudRetro танҳо як чаҳорчӯба барои пайваст кардани захираҳои ҷараёнҳои тарафи сеюм ба корбарон мебошад, ки онро ҳангоми ҷойгир нашудани он миқёспазиртар мекунад. Нақши WebRTC NAT Traversal дар ин ҷо барои осон кардани оғози пайвастшавӣ ба ҳамсол ба ҳамсол дар захираҳои ҷараёнҳои тарафи сеюм хеле муҳим аст ва барои эҷодкор пайвастшавӣ ба шабакаро осон мекунад.

    Фишурдани видео

    Фишурдани видео як қисми ҷудонашавандаи лӯла мебошад ва ба ҷараёни ҳамвор мусоидат мекунад. Ҳарчанд донистани ҳар як ҷузъиёти рамзгузории видеои VP8/H264 шарт нест, фаҳмидани мафҳумҳо метавонад ба шумо дар фаҳмидани имконоти суръати ҷараёнҳои видео, ислоҳи рафтори ғайричашмдошт ва танзими таъхир кӯмак кунад.

    Фишурдани видео барои хидмати ҷараён душвор аст, зеро алгоритм бояд кафолат диҳад, ки вақти умумии рамзгузорӣ + вақти интиқоли шабака + вақти рамзкушоӣ то ҳадди имкон камтар аст. Илова бар ин, раванди рамзгузорӣ бояд пайваста ва пайваста бошад. Баъзе мубодилаи рамзгузорӣ татбиқ намешаванд - масалан, мо наметавонем вақти рамзгузории дарозро нисбат ба андозаи хурдтари файл ва вақти рамзкушоӣ бартарӣ диҳем ё фишурдани номувофиқро истифода барем.

    Идеяи паси фишурдани видео ин нест кардани битҳои нолозими иттилоот ҳангоми нигоҳ доштани сатҳи қобили қабули дақиқ барои корбарон мебошад. Ба ғайр аз рамзгузории чаҳорчӯбаҳои тасвири статикии инфиродӣ, алгоритм чаҳорчӯбаи ҷорӣро аз чаҳорчӯбаҳои қаблӣ ва оянда хулоса мекунад, бинобар ин танҳо фарқияти онҳо фиристода мешавад. Тавре ки аз мисоли Pacman дида мешавад, танҳо нуқтаҳои дифференсиалӣ интиқол дода мешаванд.

    Бозии абрии кушодаасос дар WebRTC: p2p, мултипликатор, таъхири сифр
    Муқоисаи чаҳорчӯбаҳои видеоӣ бо истифода аз Pacman ҳамчун мисол

    Фишурдани аудио

    Ба ҳамин монанд, алгоритми фишурдани аудио маълумотеро, ки аз ҷониби одамон қабул карда наметавонанд, хориҷ мекунад. Opus дар айни замон беҳтарин кодеки аудио мебошад. Он барои интиқоли мавҷи аудио аз як протоколи фармоишӣ ба монанди RTP (Protocol Transport Protocol) тарҳрезӣ шудааст. Нигоҳдории он аз mp3 ва aac камтар аст ва сифаташ баландтар аст. Вақти таъхир одатан тақрибан 5 ~ 66,5 мс аст.

    Pion, WebRTC дар Голанг

    Ломбард як лоиҳаи кушодаасос аст, ки WebRTC-ро ба Голанг меорад. Ба ҷои печонидани муқаррарии китобхонаҳои модарии WebRTC, Pion як амали аслии Golang-и 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
    	}
        }
    }

    Фан-дар/Фан-берун

    Ин қолаби Golang ба ҳолати истифодаи CrowdPlay ва Multiple Player ба ман комилан мувофиқ аст. Пас аз ин намуна, ҳама вурудоти корбар дар як ҳуҷра ба канали марказии даромадгоҳ сохта мешаванд. Сипас медиаи бозӣ барои ҳамаи корбарон дар як ҳуҷра ҷойгир карда мешавад. Бо ин роҳ, мо ба тақсимоти ҳолати бозӣ дар байни якчанд сессияҳои бозии корбарони гуногун ноил мешавем.

    Бозии абрии кушодаасос дар WebRTC: p2p, мултипликатор, таъхири сифр
    Синхронизатсия байни сессияҳои гуногун

    Камбудиҳои Голанг

    Голанг комил нест. Канал суст аст. Дар муқоиса бо басташавӣ, канали Go танҳо як роҳи осонтар барои коркарди рӯйдодҳои ҳамзамон ва ришта аст, аммо канал иҷрои беҳтаринро таъмин намекунад. Дар зери канал мантиқи мураккаби блоккунӣ мавҷуд аст. Ҳамин тавр, ман ба татбиқ баъзе ислоҳот ворид кардам, қуфлҳо ва арзишҳои атомиро ҳангоми иваз кардани каналҳо барои беҳсозии кор.

    Илова бар ин, ҷамъкунандаи ахлот дар Голанг идоранашаванда аст, ки баъзан боиси таваққуфҳои тӯлонии шубҳанок мегардад. Ин ба барномаи ҷараён дар вақти воқеӣ хеле халал мерасонад.

    COG

    Лоиҳа китобхонаи мавҷудаи кушодаи Golang VP8/H264-ро барои фишурдани медиа ва Libretro барои эмуляторҳои бозӣ истифода мебарад. Ҳамаи ин китобхонаҳо танҳо маҷмӯаҳои китобхонаи C дар Go истифода мешаванд COG. Баъзе камбудиҳо дар рӯйхат оварда шудаанд ин паём аз ҷониби Дэйв Чейни. Мушкилоте, ки ман дучор шудам:

    • натавонистани садама дар CGO, ҳатто бо Golang RecoveryCrash;
    • нокомии муайян кардани монеаҳои иҷроиш, вақте ки мо мушкилоти муфассалро дар CGO муайян карда наметавонем.

    хулоса

    Ман ба ҳадафи худ дарк кардани хидматҳои бозии абрӣ ва эҷоди платформае расидам, ки ба ман дар бозӣ бо дӯстони худ дар онлайн бозиҳои ретро ностальгӣ кӯмак мекунад. Ин лоиҳа бе китобхонаи Пион ва дастгирии ҷомеаи Пион имконнопазир буд. Ман барои рушди интенсивии он хеле миннатдорам. API-ҳои оддии аз ҷониби WebRTC ва Pion пешниҳодшуда ҳамгироии бефосиларо таъмин карданд. Аввалин далели консепсияи ман ҳамон ҳафта нашр шуд, гарчанде ки ман дар бораи муоширати ҳамсол ба ҳамсол (P2P) маълумоти қаблӣ надоштам.

    Сарфи назар аз осонии ҳамгироӣ, ҷараёни P2P воқеан як соҳаи хеле мураккаб дар илми информатика мебошад. Вай бояд бо мураккабии меъмории шабакаҳои тӯлонӣ ба монанди IP ва NAT мубориза барад, то сессияи ҳамсол ба ҳамсолро эҷод кунад. Ҳангоми кор дар ин лоиҳа, ман дар бораи шабакасозӣ ва оптимизатсияи иҷроиш бисёр донишҳои арзишманд гирифтам, аз ин рӯ ман ҳамаро ташвиқ мекунам, ки бо истифода аз WebRTC маҳсулоти P2P эҷод кунанд.

    CloudRetro ба ҳама ҳолатҳои истифода, ки ман аз нуқтаи назари ман ҳамчун як бозигари ретро интизор будам, қонеъ мекунад. Бо вуҷуди ин, ман фикр мекунам, ки дар лоиҳа соҳаҳои зиёде мавҷуданд, ки ман метавонам онҳоро такмил диҳам, аз қабили боэътимодтар ва иҷрокунандаи шабака, таъмин кардани графикаи баландсифати бозӣ ё қобилияти мубодилаи бозиҳо байни корбарон. Ман дар ин бобат сахт кор мекунам. Лутфан пайравӣ кунед лоиҳа ва агар ба шумо писанд омада бошад дастгири кунед.

Манбаъ: will.com

Илова Эзоҳ