E wehe i ka pāʻani kapua puna ma WebRTC: p2p, multiplayer, zero latency

E wehe i ka pāʻani kapua puna ma WebRTC: p2p, multiplayer, zero latency
ʻO ka lako polokalamu ma ke ʻano he lawelawe, ka ʻōnaehana ma ke ʻano he lawelawe, ka paepae ma ke ʻano he lawelawe, ka paepae kamaʻilio ma ke ʻano he lawelawe, ka hālāwai wikiō ma ke ʻano he lawelawe, pehea e pili ana i ka pāʻani kapua ma ke ʻano he lawelawe? Ua nui nā ho'āʻo e hana i ka pāʻani kapua (Cloud Gaming), e like me Stadia, i hoʻokuʻu ʻia e Google. Stadia ʻaʻole mea hou i WebRTC, akā hiki i nā mea ʻē aʻe ke hoʻohana i ka WebRTC ma ke ʻano like?

Ua hoʻoholo ʻo Thanh Nguyen e hoʻāʻo i kēia manawa ma kāna papahana open source CloudRetro. Hoʻokumu ʻia ʻo CloudRetro ma Pion, kaulana ʻO ka waihona WebRTC e pili ana iā Go (mahalo Hōʻike ʻia mai ka hui hoʻomohala Pion no kā lākou kōkua i ka hoʻomākaukau ʻana i kēia ʻatikala). Ma kēia ʻatikala, hāʻawi ʻo Thanh i kahi hiʻohiʻona o ka hoʻolālā ʻana o kāna papahana, a kamaʻilio pū hoʻi i nā mea pono āna i aʻo ai a me nā pilikia i loaʻa iā ia i kāna hana.

komo

ʻO ka makahiki i hala aku nei, i ka wā i hoʻolaha ai ʻo Google iā Stadia, ua puhi ia i koʻu manaʻo. ʻO ka manaʻo he mea kū hoʻokahi a me ka noʻonoʻo a noʻonoʻo mau wau pehea e hiki ai kēia me ka ʻenehana i kēia manawa. ʻO ka makemake e hoʻomaopopo maikaʻi i kēia kumuhana ua hoʻoikaika iaʻu e hana i kaʻu mana ponoʻī o kahi pāʻani kapua open-source. He nani wale ka hopena. Ma lalo wau makemake e kaʻana like i ke kaʻina hana o kaʻu makahiki papahana.

TLDR: ʻaoʻao paheʻe pōkole me nā mea koʻikoʻi

No ke aha e pili ana ka pāʻani kapua i ka wā e hiki mai ana

Ke manaʻoʻiʻo nei au e lilo koke ʻo Cloud Gaming i ka hanauna hou o ka pāʻani wale nō, akā i nā wahi ʻē aʻe o ka ʻepekema kamepiula. ʻO ka pāʻani kapua ke kiʻekiʻe o ka mea kūʻai aku/server model. Hoʻonui kēia kŘkohu i ka hoʻokele hope a hoʻemi i ka hana mua ma o ka hoʻokipa ʻana i ka loiloi pāʻani ma kahi kikowaena mamao a me ke kahe ʻana i nā kiʻi/leo i ka mea kūʻai aku. Hana ke kikowaena i ka hana koʻikoʻi no laila ʻaʻole ʻae ʻia ka mea kūʻai aku i nā palena o nā lako.

ʻAe ʻo Google Stadia iā ʻoe e pāʻani Nā pāʻani AAA (ʻo ia hoʻi nā pāʻani blockbuster kiʻekiʻe) ma kahi pānaʻi e like me YouTube. Hiki ke hoʻohana ʻia ke ʻano hana like i nā noi offline koʻikoʻi e like me ka ʻōnaehana hana a i ʻole 2D/3D hoʻolālā kiʻi, etc. no laila hiki iā mākou ke holo mau iā lākou ma nā mea haʻahaʻa haʻahaʻa ma waena o nā paepae lehulehu.

E wehe i ka pāʻani kapua puna ma WebRTC: p2p, multiplayer, zero latency
ʻO ka wā e hiki mai ana o kēia ʻenehana: E noʻonoʻo inā holo ʻo Microsoft Windows 10 ma ka polokalamu kele Chrome?

He mea paʻakikī ka pāʻani Cloud

ʻO ka pāʻani kekahi o kēlā mau wahi kakaʻikahi kahi e koi ʻia ai ka pane mau a me ka wikiwiki o ka mea hoʻohana. Inā loaʻa iā mākou kahi lohi 2 kekona i ke kaomi ʻana i kahi ʻaoʻao, ʻae ʻia kēia. Hiki i nā kahawai wikiō ola ke lohi i kekahi mau kekona, akā hāʻawi mau i kahi hoʻohana kūpono. Eia nō naʻe, inā e lohi pinepine ka pāʻani ma 500ms, ʻaʻole hiki ke pāʻani. ʻO kā mākou pahuhopu ʻo ka hoʻokō ʻana i ka latency haʻahaʻa loa i hiki ke liʻiliʻi ke āpau ma waena o ka hoʻokomo a me ka media. No laila, ʻaʻole pili ke ala kuʻuna i ka hoʻoheheʻe wikiō ma aneʻi.

E wehe i ka pāʻani kapua puna ma WebRTC: p2p, multiplayer, zero latency
Laiana Paani Kapua Nui

Open source papahana CloudRetro

Ua hoʻoholo wau e hana i kahi laʻana hoʻāʻo o kahi pāʻani kapua e ʻike inā hiki kēia mau mea āpau me nā kaohi ʻana o ka pūnaewele paʻa. Ua koho au iā Golang no ka hōʻoia ʻana o ka manaʻo no ka mea ʻo ia ka ʻōlelo aʻu i kamaʻāina loa ai a kūpono hoʻi no kēia hoʻokō ʻana no nā kumu ʻē aʻe, e like me kaʻu i ʻike ai ma hope. He mea maʻalahi ka hele a ulu wikiwiki; He mea maikaʻi nā Kanika ma Go no ka mālama ʻana i ka multithreading.

ʻO ka papahana CloudRetro.io he lawelawe pāʻani kapua no ka pāʻani retro. ʻO ka pahuhopu o ka papahana ka lawe ʻana i ka ʻike pāʻani ʻoluʻolu loa i nā pāʻani retro kuʻuna a hoʻohui i ka multiplayer.
Hiki iā ʻoe ke aʻo hou e pili ana i ka papahana ma aneʻi: https://github.com/giongto35/cloud-game.

Nā hana CloudRetro

Hoʻohana ʻo CloudRetro i nā pāʻani retro e hōʻike i ka mana o ka pāʻani kapua. Hiki iā ʻoe ke loaʻa i nā ʻike pāʻani kūʻokoʻa he nui.

  • Hiki ke lawe i ka pāʻani
    • Pāʻani koke i ka wā e wehe ai i ka ʻaoʻao; ʻaʻohe pono e hoʻoiho a hoʻokomo paha
    • Hana ʻia ma ka polokalamu kele pūnaewele, no laila ʻaʻohe polokalamu pono e holo ai

  • Hiki ke kaʻana like ʻia nā kau pāʻani ma nā ʻaoʻao he nui a mālama ʻia i loko o ke ao no ka manawa aʻe e komo ai ʻoe
  • Hiki ke hoʻoheheʻe ʻia ka pāʻani, a i ʻole hiki ke pāʻani ʻia e kekahi mau mea hoʻohana i ka manawa hoʻokahi:
    • ʻO Crowdplay e like me TwitchPlayPokemon, ʻoi aku ka nui o ka cross-platform a ʻoi aku ka manawa maoli
    • Nā pāʻani hoʻopahemo ma ka pūnaewele. Hiki i nā mea hoʻohana he nui ke pāʻani me ka hoʻonohonoho ʻole ʻana i kahi pūnaewele. Hiki ke pāʻani ʻia ʻo Samurai Shodown e nā mea pāʻani 2 ma luna o ka pūnaewele CloudRetro

    E wehe i ka pāʻani kapua puna ma WebRTC: p2p, multiplayer, zero latency
    Hōʻike hōʻike o ka pāʻani Multiplayer pūnaewele ma nā mea like ʻole

    Kāpena

    Koi a me ka ʻenehana ahu

    Aia ma lalo kahi papa inoa o nā koi aʻu i hoʻonohonoho ai ma mua o ka hoʻomaka ʻana i ka papahana.

    1. Hoʻokahi mea pāʻani
    ʻAʻole paha he mea koʻikoʻi a ʻike paha kēia koi ma aneʻi, akā ʻo ia kekahi o kaʻu mau kī nui, e hiki ai i ka pāʻani kapua ke noho mamao loa mai nā lawelawe streaming kuʻuna. Inā nānā mākou i kahi pāʻani pāʻani hoʻokahi, hiki iā mākou ke hoʻopau i kahi kikowaena kikowaena a i ʻole CDN no ka mea ʻaʻole pono mākou e kahe i ka lehulehu. Ma kahi o ka hoʻouka ʻana i nā kahawai i kahi server sink a i ʻole ka hāʻawi ʻana i nā ʻeke i kahi kikowaena WebSocket kikowaena, hāʻawi pololei ʻia nā kahawai lawelawe i ka mea hoʻohana ma o kahi pilina WebRTC peer-to-peer.

    2. Haʻahaʻa latency Media kahawai
    Heluhelu e pili ana iā Stadia, ʻike pinepine au i ka WebRTC i ʻōlelo ʻia ma kekahi mau ʻatikala. Ua ʻike au he ʻenehana koʻikoʻi ʻo WebRTC a kūpono loa no ka hoʻohana ʻana i ka pāʻani kapua. ʻO WebRTC kahi papahana e hāʻawi ana i nā polokalamu kele pūnaewele a me nā polokalamu kelepona me ka kamaʻilio manawa maoli ma o kahi API maʻalahi. Hāʻawi ia i ka hoʻohui ʻana o nā hoa-a-peer, ua hoʻopaʻa ʻia no ka media, a loaʻa iā ia nā codec maʻamau i kūkulu ʻia e like me VP8 a me H264.

    Hoʻomaka wau i ka hōʻoia ʻana i ka ʻike mea hoʻohana maikaʻi loa ma mua o ka mālama ʻana i nā kiʻi kiʻi kiʻekiʻe. ʻAe ʻia kekahi mau poho ma ka algorithm. Loaʻa iā Google Stadia kahi hana hou o ka hōʻemi ʻana i ka nui o ke kiʻi ma ke kikowaena, a ua hoʻonui ʻia nā kiʻi i kahi kiʻekiʻe kiʻekiʻe ma mua o ka lawe ʻia ʻana i nā hoa.

    3. Hoʻokaʻawale ʻia nā ʻōnaehana me ke ala ʻāina
    ʻAʻohe mea i hoʻopaʻa ʻia i ka algorithm compression a me ke code, ʻo ka pūnaewele ka mea hoʻoholo e hāʻawi nui i ka latency. Pono ka hale hoʻolālā e hoʻopili i ke kikowaena kokoke loa i ka mea hoʻohana e hōʻemi i ka manawa holo kaʻapuni (RTT). Pono e loaʻa i ka hale hoʻolālā ka mea hoʻonohonoho 1 a me nā kikowaena streaming e hoʻolaha ʻia ma ka honua: US West, US East, Europe, Singapore, China. Pono e hoʻokaʻawale ʻia nā kikowaena streaming āpau. Hiki i ka ʻōnaehana ke hoʻololi i kona hoʻohele ʻana i ka wā e hui ai kahi kikowaena a haʻalele paha i ka pūnaewele. No laila, me nā kaʻa nui, hoʻohui i nā kikowaena hou e hiki ai ke hoʻonui i ka pae.

    4. Ka launa pū ʻana o ka polokalamu kele pūnaewele
    ʻOi aku ka maikaʻi o ka pāʻani Cloud i ka wā e koi ai i ka mea liʻiliʻi mai nā mea hoʻohana. 'O ia ho'i, hiki ke holo ma ka polokalamu kele pūnaewele. Kōkua nā polokalamu kele i ka ʻike pāʻani me ka ʻoluʻolu e like me ka hiki i nā mea hoʻohana, e mālama iā lākou mai ka hoʻokomo ʻana i nā polokalamu a me nā lako. Kōkua pū nā polokalamu kele i ka hāʻawi ʻana i ka hana cross-platform ma waena o nā mana kelepona a me ka papapihi. ʻO ka mea pōmaikaʻi, kākoʻo maikaʻi ʻia ʻo WebRTC ma nā ʻano polokalamu kele pūnaewele.

    5. Hoʻokaʻawale maopopo i ka pāʻani pāʻani a me ka lawelawe
    ʻIke au i ka lawelawe pāʻani kapua ma ke ʻano he kahua. Pono nā kānaka a pau e hoʻohui i kekahi mea i ka paepae. I kēia manawa ua hoʻohui wau LibRetro me ka lawelawe pāʻani kapua no ka mea hāʻawi ʻo LibRetro i kahi pāʻani emulator pāʻani nani no nā pāʻani retro e like me SNES, GBA, PS.

    6. Nā lumi no ka multiplayer, ka pāʻani lehulehu a me ka pilina waho (hohonu-hohonu) me ka pāʻani
    Kākoʻo ʻo CloudRetro i nā pāʻani hou e like me CrowdPlay a me Online MultiPlayer no nā pāʻani retro. Inā wehe kekahi mau mea hoʻohana i ka loulou hohonu like ma nā kamepiula like ʻole, e ʻike lākou i ka holo ʻana o ka pāʻani like a hiki ke hui pū me ia.

    Eia kekahi, mālama ʻia nā mokuʻāina pāʻani i ka mālama ʻana i ke ao. ʻAe kēia i nā mea hoʻohana e hoʻomau i ka pāʻani ʻana i kēlā me kēia manawa ma kekahi mea ʻē aʻe.

    7. Ka hoʻopaʻa ʻana i ka ʻeleʻele
    E like me nā SAAS i kēia mau lā, pono e hoʻolālā ʻia ka pāʻani kapua e hiki ke hoʻonui ʻia. ʻO ka hoʻolālā coordinator-worker hiki iā ʻoe ke hoʻohui i nā limahana hou aku e lawelawe i nā kaʻa hou aku.

    8. ʻAʻohe pili i hoʻokahi ao
    Hoʻokipa ʻia ka ʻōnaehana ʻo CloudRetro ma nā mea hāʻawi kapuaʻi like ʻole (Digital Ocean, Alibaba, mea hoʻolako maʻamau) no nā wahi like ʻole. Hiki iaʻu ke holo i loko o kahi pahu Docker no ka ʻenehana a hoʻonohonoho i nā hoʻonohonoho pūnaewele me ka hoʻohana ʻana i kahi palapala bash e pale aku ai i ka laka ʻana i kahi mea hoʻolako kapua. Ma ka hoʻohui ʻana i kēia me NAT Traversal ma WebRTC, hiki iā mākou ke maʻalahi e hoʻokau iā CloudRetro ma kekahi paepae ao a ma nā mīkini hoʻohana.

    Hoʻolālā hoʻolālā

    Mea hana: (a i ʻole ke kikowaena streaming i ʻōlelo ʻia ma luna) e hoʻonui i nā pāʻani, holo i ka pipeline encoding, a kahe i ka media i hoʻopili ʻia i nā mea hoʻohana. Hoʻokaʻawale ʻia nā hiʻohiʻona limahana ma ka honua holoʻokoʻa, a hiki i kēlā me kēia limahana ke lawelawe i nā manawa hoʻohana he nui i ka manawa like.

    Luna Hooponopono: ʻo ia ke kuleana no ka hoʻopaʻa ʻana i ka mea hoʻohana hou me ka mea hana kūpono loa no ke kahe ʻana. Hoʻopili ka mea hoʻonohonoho me nā limahana ma o WebSocket.

    Waihona mokuʻāina pāʻani: waihona mamao waena no nā mokuʻāina pāʻani āpau. Hāʻawi kēia waihona i nā hana koʻikoʻi e like me ka mālama mamao / hoʻouka.

    E wehe i ka pāʻani kapua puna ma WebRTC: p2p, multiplayer, zero latency
    ʻO ka hoʻolālā kiʻekiʻe o CloudRetro

    Palapala Kiʻekiʻe

    Ke wehe ka mea hoʻohana hou iā CloudRetro ma nā ʻanuʻu 1 a me 2 i hōʻike ʻia ma ke kiʻi ma lalo nei, noi ʻia ka mea hoʻonohonoho me ka papa inoa o nā limahana i loaʻa i ka ʻaoʻao mua. Ma hope o kēia, ma ka ʻanuʻu 3, helu ka mea kūʻai aku i nā lohi no nā moho āpau e hoʻohana ana i kahi noi ping HTTP. Hoʻihoʻi ʻia kēia papa inoa o nā lohi i ka coordinator i hiki iā ia ke hoʻoholo i ka limahana kūpono e lawelawe i ka mea hoʻohana. Hoʻokumu ka ʻanuʻu 4 ma lalo i ka pāʻani. Hoʻokumu ʻia kahi pilina streaming WebRTC ma waena o ka mea hoʻohana a me ka limahana i hāʻawi ʻia.
    E wehe i ka pāʻani kapua puna ma WebRTC: p2p, multiplayer, zero latency
    Palapala mea hoʻohana ma hope o ka loaʻa ʻana

    He aha ka mea i loko o ka mea hana

    Mālama ʻia nā pāʻani a me nā pipeline kahe i loko o ka mea hana ma kahi kaʻawale a hoʻololi i ka ʻike ma laila ma o ka interface. I kēia manawa, hana ʻia kēia kamaʻilio ma ka hoʻoili ʻana i ka ʻikepili i ka hoʻomanaʻo ma o Nā kahawai ʻo Golang ma ka hana like. ʻO ka pahuhopu aʻe ʻo ka hoʻokaʻawale ʻana, ʻo ia hoʻi. hoʻokuʻu kūʻokoʻa o ka pāʻani ma kahi kaʻina hana ʻē aʻe.

    E wehe i ka pāʻani kapua puna ma WebRTC: p2p, multiplayer, zero latency
    Ka pilina o nā mea hana

    Nā mea nui:

    • WebRTC: he ʻāpana mea kūʻai aku e ʻae i ka hoʻokomo ʻana o ka mea hoʻohana a hoʻopuka i ka media i hoʻopaʻa ʻia mai ke kikowaena.
    • Emulator pāʻani: mea pāʻani. Mahalo i ka hale waihona puke Libretro, hiki i ka ʻōnaehana ke holo i ka pāʻani i loko o ke kaʻina hana like a me ka intercept media a me ke kahawai komo.
    • Lawe ʻia nā kiʻi i loko o ka pāʻani a hoʻouna ʻia i ka encoder.
    • Kiʻi/Leo Encoder: he paipu hoʻopāpā e lawe ana i nā kiʻi media, hoʻopili iā lākou ma ke kua, a hoʻopuka i nā kiʻi/leo i hoʻopaʻa ʻia.

    Ka hoʻokō

    Ke hilinaʻi nei ʻo CloudRetro iā WebRTC ma kāna ʻenehana iwi kuamoʻo, no laila ma mua o ka luʻu ʻana i nā kikoʻī o ka hoʻokō Golang, ua hoʻoholo wau e kamaʻilio e pili ana iā WebRTC ponoʻī. He ʻenehana kupaianaha kēia i kōkua nui iaʻu i ka loaʻa ʻana o ka latency sub-second no ke kahe ʻana i ka ʻikepili.

    WebRTC

    Hoʻolālā ʻia ʻo WebRTC no ka hoʻolako ʻana i nā pilina peer-to-peer kiʻekiʻe ma nā polokalamu kelepona maoli a me nā polokalamu kele pūnaewele e hoʻohana ana i nā API maʻalahi.

    NAT Kaahele

    ʻIke ʻia ʻo WebRTC no kāna hana NAT Traversal. Hoʻolālā ʻia ʻo WebRTC no ke kamaʻilio peer-to-peer. ʻO kāna pahuhopu ka loaʻa ʻana o ke ala pololei kūpono loa, e pale ana i nā ʻīpuka NAT a me nā pā ahi no ka kamaʻilio peer-to-peer ma o ke kaʻina i kapa ʻia. hau. Ma ke ʻano o kēia kaʻina hana, ʻike nā API WebRTC i kāu helu IP lehulehu me ka hoʻohana ʻana i nā kikowaena STUN a hoʻouna iā ia i ke kikowaena relay (ʻO TURN) ke hiki ʻole ke hoʻokumu ʻia kahi pilina pololei.

    Eia naʻe, ʻaʻole hoʻohana pono ʻo CloudRetro i kēia hiʻohiʻona. ʻAʻole i loaʻa kāna mau pilina ma waena o nā mea hoʻohana, akā ma waena o nā mea hoʻohana a me nā kikowaena kapua. ʻOi aku ka liʻiliʻi o nā kaohi kamaʻilio pololei ma ka ʻaoʻao kikowaena o ke kŘkohu ma mua o ka mea hoʻohana maʻamau. Hāʻawi kēia iā ʻoe e wehe mua i nā awa komo a hoʻohana pololei i nā IP IP lehulehu, ʻoiai ʻaʻole ka server ma hope o NAT.

    Ma mua, makemake wau e hoʻohuli i ka papahana i kahi kahua hoʻolaha pāʻani no Cloud Gaming. ʻO ka manaʻo e ʻae i nā mea hana pāʻani e hāʻawi i nā pāʻani a me nā kumuwaiwai streaming. A e launa pū nā mea hoʻohana me nā mea hoʻolako. Ma kēia ʻano decentralized, ʻo CloudRetro kahi hoʻolālā no ka hoʻopili ʻana i nā kumuwaiwai streaming ʻaoʻao ʻekolu i nā mea hoʻohana, e hoʻonui i ka scalable ke hoʻokipa ʻole ʻia. He mea koʻikoʻi ke kuleana o WebRTC NAT Traversal ma ʻaneʻi e hoʻomaʻamaʻa i ka hoʻomaka ʻana o ka pilina o nā hoa ma nā kumuwaiwai streaming ʻekolu, e maʻalahi i ka mea hana ke hoʻopili i ka pūnaewele.

    Paʻi wikiō

    ʻO ke kaomi wikiō he ʻāpana koʻikoʻi o ka pipeline a hāʻawi nui i ka holo mālie. ʻOiai ʻaʻole pono e ʻike i nā kikoʻī āpau o VP8/H264 video encoding, ʻo ka hoʻomaopopo ʻana i nā manaʻo hiki ke kōkua iā ʻoe e hoʻomaopopo i nā koho wikiwiki wikiō, debug i nā ʻano i manaʻo ʻole ʻia, a hoʻoponopono i ka latency.

    He mea paʻakikī ka hoʻopaʻa ʻana i ka wikiō no kahi lawelawe streaming no ka mea pono e hōʻoia ka algorithm i ka haʻahaʻa o ka manawa hoʻopili + manawa hoʻouna pūnaewele + manawa decoding. Eia kekahi, pono e paʻa a hoʻomau ke kaʻina hana coding. ʻAʻole pili kekahi mau kālepa hoʻopaʻa ʻana—no ka laʻana, ʻaʻole hiki iā mākou ke makemake i nā manawa hoʻopāpā lōʻihi ma mua o ka liʻiliʻi liʻiliʻi o nā faila a me nā manawa hoʻololi, a i ʻole ke hoʻohana ʻana i ka hoʻoemi like ʻole.

    ʻO ka manaʻo ma hope o ka hoʻopiʻi wikiō ʻo ka hoʻopau ʻana i nā ʻikepili pono ʻole ʻoiai e mālama ana i kahi pae kūpono o ka pololei no nā mea hoʻohana. Ma waho aʻe o ka hoʻopili ʻana i nā kiʻi kiʻi static, hoʻohālikelike ka algorithm i ke kiʻi o kēia manawa mai nā mea ma mua a me nā mea e hiki mai ana, no laila ua hoʻouna ʻia ko lākou ʻokoʻa. E like me ka mea i ʻike ʻia mai ka laʻana me Pacman, hoʻouna wale ʻia nā helu ʻokoʻa.

    E wehe i ka pāʻani kapua puna ma WebRTC: p2p, multiplayer, zero latency
    Hoʻohālikelike i nā kiʻi wikiō e hoʻohana ana iā Pacman ma ke ʻano he laʻana

    Hoʻopiʻi leo

    Pēlā nō, hoʻopau ka algorithm compression audio i ka ʻikepili i hiki ʻole ke ʻike ʻia e nā kānaka. ʻO Opus ka codec leo maikaʻi loa i kēia manawa. Hoʻolālā ʻia e hoʻouna i kahi hawewe leo ma luna o kahi protocol datagram i kauoha ʻia e like me RTP (Real Time Transport Protocol). He haʻahaʻa kona latency ma mua o ka mp3 a me ka aac, a ʻoi aku ka maikaʻi. ʻO ka latency maʻamau ma kahi o 5 ~ 66,5ms.

    Pion, WebRTC ma Golang

    ʻO Pawn he papahana kumu hāmama e lawe mai iā WebRTC iā Golang. Ma kahi o ka hoʻopili maʻamau o nā hale waihona puke C++ WebRTC maoli, ʻo Pion kahi hoʻokō Golang maoli o WebRTC me ka hana ʻoi aku ka maikaʻi, Go integration, a me ka mana mana ma nā protocol WebRTC.

    Hiki i ka waihona ke hoʻoheheʻe me ka nui o nā mea i kūkulu ʻia me ka latency sub-second. Loaʻa iā ia kāna hoʻokō pono o STUN, DTLS, SCTP, etc. a me kekahi mau hoʻokolohua me QUIC a me WebAssembly. He kumu hoʻonaʻauao maikaʻi loa kēia hale waihona puke me nā palapala maikaʻi loa, nā hoʻokō protocol network, a me nā hiʻohiʻona maikaʻi.

    ʻO ke kaiāulu Pion, alakaʻi ʻia e kahi mea hana makemake nui, he olaola, me ka nui o nā kūkākūkā maikaʻi e hele nei e pili ana iā WebRTC. Inā makemake ʻoe i kēia ʻenehana, e hui pū http://pion.ly/slack - e aʻo ʻoe i nā mea hou he nui.

    Ke kākau ʻana iā CloudRetro ma Golang

    E wehe i ka pāʻani kapua puna ma WebRTC: p2p, multiplayer, zero latency
    Ka hoʻokō ʻana o kahi mea hana ma Go

    E hele i nā Channels i ka hana

    Mahalo i ka hoʻolālā kahawai nani o Go, ua maʻalahi loa nā pilikia o ke kahe ʻana o ka hanana a me ka concurrency. E like me ke kiʻikuhi, loaʻa i nā GoRoutine nā ʻāpana he nui e holo like ana. Mālama kēlā me kēia ʻāpana i kona mokuʻāina a kamaʻilio ma o nā ala. Hoʻoikaika ka ʻōlelo a Golang i hoʻokahi hanana atomic e hana i kēlā me kēia manawa o ka pāʻani (game tick). 'O ia ho'i, 'a'ole pono ka laka no kēia ho'olālā. No ka laʻana, ke mālama ka mea hoʻohana, koi ʻia kahi kiʻi piha o ke kūlana pāʻani. Pono e hoʻomau kēia mokuʻāina, e komo a hiki i ka pau ʻana o ka mālama ʻana. I loko o kēlā me kēia kiʻi pāʻani, hiki i ka hope ke mālama wale i kahi hana mālama a hoʻokomo paha, e mālama pono ai i ke kaʻina hana.

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

    Pepa-i/Pepa-waho

    Ua kūpono kēia kime Golang i kaʻu hihia hoʻohana CrowdPlay a me Multiple Player. Ma muli o kēia hiʻohiʻona, kūkulu ʻia nā mea hoʻohana a pau i loko o ka lumi hoʻokahi i ke kahawai komo waena. Hoʻouna ʻia ka pāʻani pāʻani i nā mea hoʻohana āpau ma ka lumi hoʻokahi. Ma kēia ala, hoʻokō mākou i ka mahele o ka mokuʻāina o ka pāʻani ma waena o kekahi mau kau pāʻani o nā mea hoʻohana like ʻole.

    E wehe i ka pāʻani kapua puna ma WebRTC: p2p, multiplayer, zero latency
    Ka hoʻonohonoho like ʻana ma waena o nā kau like ʻole

    Nā hemahema o Golang

    ʻAʻole kūpono ʻo Golang. Ua lohi ke kahawai. Ke hoʻohālikelike ʻia i ka pale ʻana, ʻo Go channel he ala maʻalahi loa ia e mālama i nā hanana like ʻole a me nā threaded, akā ʻaʻole hāʻawi ka channel i ka hana maikaʻi loa. Aia ka mana'o ho'opa'a pa'akikī ma lalo o ke kahawai. No laila ua hana wau i kekahi mau hoʻololi i ka hoʻokō, hoʻopili hou i nā laka a me nā waiwai atomic i ka wā e hoʻololi ai i nā kahawai e hoʻomaikaʻi i ka hana.

    Eia kekahi, ʻaʻole mālama ʻia ka ʻohi ʻōpala ma Golang, i kekahi manawa e hoʻomaha lōʻihi. Hoʻopilikia nui kēia i ka polokalamu hoʻoheheʻe manawa maoli.

    ʻO CGO

    Hoʻohana ka papahana i ka waihona Golang VP8/H264 open source no ka hoʻopili ʻana i ka media a me Libretro no nā emulators pāʻani. ʻO kēia mau hale waihona puke he mea hoʻopili wale ʻia o ka waihona C ma Go me ka hoʻohana ʻana ʻO CGO. Ua helu ʻia kekahi o nā hemahema ma keia pou na Dave Cheney. Nā pilikia i loaʻa iaʻu:

    • hiki ʻole ke hopu i kahi pōʻino ma CGO, ʻoiai me Golang RecoveryCrash;
    • ʻaʻole hiki ke ʻike i nā bottlenecks hana inā ʻaʻole hiki iā mākou ke ʻike i nā pilikia kikoʻī ma CGO.

    hopena

    Ua hoʻokō au i kaʻu pahuhopu o ka hoʻomaopopo ʻana i nā lawelawe pāʻani kapua a me ka hana ʻana i kahi kahua e kōkua iaʻu e pāʻani i nā pāʻani retro nostalgic me kaʻu mau hoaaloha ma ka pūnaewele. ʻAʻole hiki ke loaʻa kēia papahana me ka ʻole o ka waihona Pion a me ke kākoʻo o ke kaiāulu Pion. Mahalo nui wau i kona ulu ʻana. ʻO nā API maʻalahi i hāʻawi ʻia e WebRTC a me Pion i hōʻoia i ka hoʻohui pono ʻole. Ua hoʻokuʻu ʻia kaʻu hōʻoia mua o ka manaʻo i kēlā pule hoʻokahi, ʻoiai ʻaʻohe oʻu ʻike mua i ke kamaʻilio peer-to-peer (P2P).

    ʻOiai ka maʻalahi o ka hoʻohui ʻana, ʻo P2P streaming he wahi paʻakikī loa i ka ʻepekema kamepiula. Pono ʻo ia e hana i ka paʻakikī o nā hale hana pūnaewele lōʻihi e like me IP a me NAT e hana i kahi hālāwai peer-to-peer. ʻOiai e hana ana au i kēia papahana, ua loaʻa iaʻu ka ʻike waiwai nui e pili ana i ka pūnaewele a me ka hoʻokō ʻana i ka hana, no laila paipai wau i nā mea a pau e hoʻāʻo e kūkulu i nā huahana P2P me ka hoʻohana ʻana iā WebRTC.

    Mālama ʻo CloudRetro i nā hihia hoʻohana āpau aʻu i manaʻo ai mai koʻu hiʻohiʻona ma ke ʻano he mea pāʻani retro. Eia naʻe, manaʻo wau he nui nā wahi i loko o ka papahana e hiki iaʻu ke hoʻomaikaʻi, e like me ka hoʻolilo ʻana i ka pūnaewele i hilinaʻi a me ka hoʻokō, hāʻawi i nā kiʻi pāʻani kiʻekiʻe kiʻekiʻe, a i ʻole ka hiki ke kaʻana like i nā pāʻani ma waena o nā mea hoʻohana. Ke hooikaika nei au i keia. E ʻoluʻolu e hahai papahana a kākoʻo inā makemake ʻoe.

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka