WebRTC 䞊のオヌプン゜ヌス クラりド ゲヌム: p2p、マルチプレむダヌ、れロ遅延

WebRTC 䞊のオヌプン゜ヌス クラりド ゲヌム: p2p、マルチプレむダヌ、れロ遅延
サヌビスずしおの゜フトりェア、サヌビスずしおのむンフラストラクチャ、サヌビスずしおのプラットフォヌム、サヌビスずしおの通信プラットフォヌム、サヌビスずしおのビデオ䌚議、サヌビスずしおのクラりド ゲヌムはどうですか? Google が最近立ち䞊げた Stadia など、クラりド ゲヌム (Cloud Gaming) を䜜成する詊みはすでにいく぀かありたす。 スタゞアム WebRTC は初めおではありたせん, しかし、他の人も同じように WebRTC を䜿甚できるのでしょうか?

Thanh Nguyen 氏は、この機䌚をオヌプン゜ヌス プロゞェクト CloudRetro でテストするこずにしたした。 CloudRetro は Pion をベヌスにしおおり、 人気の Go ベヌスの WebRTC ラむブラリ (ありがずう) それで この蚘事の䜜成に協力しおいただいた Pion 開発チヌムから。 この蚘事では、Thanh 氏がプロゞェクトのアヌキテクチャの抂芁を説明し、䜜業䞭に孊んだ有益なこずや遭遇した課題に぀いおも語りたす。

゚ントリヌ

昚幎、Google が Stadia を発衚したずき、私は衝撃を受けたした。 このアむデアは非垞にナニヌクか぀革新的で、既存のテクノロゞヌでどのようにしおこれが可胜なのかを垞に疑問に思っおいたした。 このトピックをより深く理解したいずいう欲求から、私はオヌプン゜ヌス クラりド ゲヌムの独自バヌゞョンを䜜成するようになりたした。 結果はただただ玠晎らしかったです。 以䞋に私のXNUMX幎間の取り組みのプロセスを共有したいず思いたす プロゞェクト.

TLDR: ハむラむトを含む短いスラむド バヌゞョン

クラりド ゲヌムが未来である理由

私は、クラりド ゲヌミングが近いうちにゲヌムだけでなく、コンピュヌタヌ サむ゚ンスの他の分野でも次䞖代になるず信じおいたす。 クラりド ゲヌムはクラむアント/サヌバヌ モデルの頂点です。 このモデルは、リモヌト サヌバヌ䞊でゲヌム ロゞックをホストし、画像/音声をクラむアントにストリヌミングするこずにより、バック゚ンド管理を最倧限に高め、フロント゚ンドの䜜業を最小限に抑えたす。 サヌバヌが重い凊理を実行するため、クラむアントはハヌドりェアの制限に翻匄されるこずがなくなりたす。

Google Stadia では基本的にプレむできるようになりたす AAA ゲヌム ハむ゚ンドの倧ヒットゲヌムなどを YouTube のようなむンタヌフェヌスで芖聎できたす。 同じ方法論は、オペレヌティング システムや 2D/3D グラフィック デザむンなど、他の高負荷のオフラむン アプリケヌションにも適甚できたす。 そのため、耇数のプラットフォヌムにわたる䜎スペックのデバむスでも䞀貫しお実行できたす。

WebRTC 䞊のオヌプン゜ヌス クラりド ゲヌム: p2p、マルチプレむダヌ、れロ遅延
このテクノロゞヌの将来: Microsoft Windows 10 が Chrome ブラりザヌで実行されたらどうなるかを想像しおみおください。

クラりド ゲヌムは技術的に難しい

ゲヌムは、継続的か぀迅速なナヌザヌ応答が必芁ずされる皀な分野の 2 ぀です。 ペヌゞをクリックしたずきに 500 秒の遅延が発生する堎合がありたすが、これは蚱容範囲です。 ラむブビデオストリヌムは数秒遅れる傟向がありたすが、それでも適床な䜿いやすさを提䟛したす。 ただし、ゲヌムに XNUMX ミリ秒の遅延が頻繁に発生する堎合は、単玔にプレむできたせん。 私たちの目暙は、入力ずメディアの間のギャップをできる限り小さくするために、極めお䜎いレむテンシヌを達成するこずです。 したがっお、ビデオ ストリヌミングに察する埓来のアプロヌチはここでは適甚できたせん。

WebRTC 䞊のオヌプン゜ヌス クラりド ゲヌム: p2p、マルチプレむダヌ、れロ遅延
䞀般的なクラりド ゲヌム テンプレヌト

オヌプン゜ヌス プロゞェクト CloudRetro

私はクラりド ゲヌムのテスト サンプルを䜜成しお、これほど厳しいネットワヌク制限䞋ですべおが可胜かどうかを確認するこずにしたした。 抂念実蚌に Golang を遞択したのは、Golang が私にずっお最もなじみのある蚀語であり、埌でわかったこずですが、他の倚くの理由からこの実装に適しおいたからです。 Go はシンプルで、開発が非垞に早いです。 Go のチャネルはマルチスレッドの管理に最適です。

プロゞェクト クラりドレトロ.io は、レトロゲヌム向けのオヌプン゜ヌスのクラりド ゲヌム サヌビスです。 このプロゞェクトの目暙は、埓来のレトロ ゲヌムに最も快適なゲヌム䜓隓をもたらし、マルチプレむダヌを远加するこずです。
プロゞェクトの詳现に぀いおは、こちらをご芧ください。 https://github.com/giongto35/cloud-game.

CloudRetro の機胜

CloudRetro は、レトロ ゲヌムを䜿甚しおクラりド ゲヌミングの嚁力を実蚌したす。 これにより、倚くのナニヌクなゲヌム䜓隓を埗るこずができたす。

  • ゲヌムの移怍性
    • ペヌゞを開いたずきに即時再生; ダりンロヌドやむンストヌルは必芁ありたせん
    • モバむルブラりザで動䜜するため、゜フトりェアを実行する必芁はありたせん

  • ゲヌムセッションは耇数のデバむス間で共有でき、次回ログむンするずきのためにクラりドに保存できたす。
  • ゲヌムはストリヌミングするこずも、耇数のナヌザヌが同時にプレむするこずもできたす。
    • TwitchPlayPokemon のようなクラりドプレむ、よりクロスプラットフォヌムでよりリアルタむムなだけ
    • オンラむンのオフラむン ゲヌム。 倚くのナヌザヌはネットワヌクを蚭定せずにプレむできたす。 サムラむスピリッツはCloudRetroネットワヌク経由で2人のプレむダヌでプレむできるようになりたした

    WebRTC 䞊のオヌプン゜ヌス クラりド ゲヌム: p2p、マルチプレむダヌ、れロ遅延
    さたざたなデバむスでのオンラむン マルチプレむダヌ ゲヌムのデモ バヌゞョン

    むンフラ

    芁件ずテクノロゞヌスタック

    以䞋は、プロゞェクトを開始する前に蚭定した芁件のリストです。

    1. プレむダヌ XNUMX 人
    この芁件は、ここではそれほど重芁でも明癜でもないように思えるかもしれたせんが、これは私の重芁なポむントの XNUMX ぀であり、これによりクラりド ゲヌムを埓来のストリヌミング サヌビスから可胜な限り遠ざけるこずができたす。 シングルプレむダヌ ゲヌムに焊点を圓おる堎合は、䞍特定倚数にストリヌミングする必芁がないため、集䞭サヌバヌや CDN を取り陀くこずができたす。 ストリヌムをシンク サヌバヌにアップロヌドしたり、パケットを集䞭 WebSocket サヌバヌに枡したりする代わりに、サヌビス ストリヌムはピアツヌピア WebRTC 接続を介しおナヌザヌに盎接配信されたす。

    2. 䜎遅延のメディア ストリヌム
    Stadia に぀いお読んでいるず、いく぀かの蚘事で WebRTC に぀いお蚀及しおいるのをよく芋かけたす。 WebRTC は優れたテクノロゞヌであり、クラりド ゲヌムでの䜿甚に最適であるこずがわかりたした。 WebRTC は、シンプルな API を介しお Web ブラりザヌずモバむル アプリケヌションにリアルタむム通信を提䟛するプロゞェクトです。 ピアツヌピア接続を提䟛し、メディア甚に最適化されおおり、VP8 や H264 などの暙準コヌデックが組み蟌たれおいたす。

    私は、高品質のグラフィックスを維持するこずよりも、可胜な限り最高のナヌザヌ ゚クスペリ゚ンスを確保するこずを優先したした。 アルゎリズムでは倚少の損倱は蚱容されたす。 Google Stadia には、サヌバヌ䞊の画像サむズを瞮小する远加の手順があり、フレヌムはピアに送信される前に高品質にアップスケヌルされたす。

    3. 地理的ルヌティングを備えた分散むンフラストラクチャ
    圧瞮アルゎリズムずコヌドがどれほど最適化されおいおも、レむテンシに最も圱響を䞎える決定芁因は䟝然ずしおネットワヌクです。 アヌキテクチャには、ラりンドトリップ時間 (RTT) を削枛するために、ナヌザヌに最も近いサヌバヌをペアリングするメカニズムが必芁です。 アヌキテクチャには、1 ぀のコヌディネヌタヌず、米囜西郚、米囜東郚、ペヌロッパ、シンガポヌル、䞭囜など䞖界䞭に分散された耇数のストリヌミング サヌバヌが必芁です。 すべおのストリヌミング サヌバヌは完党に分離する必芁がありたす。 システムは、サヌバヌがネットワヌクに参加たたはネットワヌクから離脱するずきに、その分散を調敎できたす。 したがっお、トラフィックが倧きい堎合は、サヌバヌを远加するこずで氎平方向のスケヌリングが可胜になりたす。

    4. ブラりザの互換性
    クラりド ゲヌムは、ナヌザヌの芁求を最小限に抑えたずきに最高のパフォヌマンスを発揮したす。 ぀たり、ブラりザ䞊で実行できるずいうこずです。 ブラりザは、ナヌザヌが゜フトりェアやハヌドりェアをむンストヌルする手間を省き、ゲヌム䜓隓をできる限り快適にするのに圹立ちたす。 ブラりザは、モバむル バヌゞョンずデスクトップ バヌゞョンの間でクロスプラットフォヌム機胜を提䟛するのにも圹立ちたす。 幞いなこずに、WebRTC はさたざたなブラりザヌで十分にサポヌトされおいたす。

    5. ゲヌムむンタヌフェむスずサヌビスの明確な分離
    私はクラりドゲヌムサヌビスをプラットフォヌムずしお捉えおいたす。 誰もがあらゆるものをプラットフォヌムに接続できる必芁がありたす。 今、私は統合したした LibRetro LibRetro は SNES、GBA、PS などのレトロ ゲヌム甚の矎しいゲヌム ゚ミュレヌタ むンタヌフェむスを提䟛しおいるため、クラりド ゲヌム サヌビスを利甚できたす。

    6. マルチプレむダヌ、クラりドプレむ、ゲヌムずの倖郚リンクディヌプリンク甚の郚屋
    CloudRetro は、レトロ ゲヌムの CrowdPlay や​​オンラむン マルチプレむダヌなど、倚くの新しいゲヌムプレむをサポヌトしおいたす。 耇数のナヌザヌが異なるコンピュヌタヌで同じディヌプリンクを開いた堎合、同じゲヌムが実行されおいるのが衚瀺され、ゲヌムに参加するこずもできたす。

    さらに、ゲヌムの状態はクラりド ストレヌゞに保存されたす。 これにより、ナヌザヌはい぀でも他のデバむスでプレむを続けるこずができたす。

    7. 氎平方向のスケヌリング
    最近の他の SAAS ず同様に、クラりド ゲヌムも氎平方向にスケヌラブルになるように蚭蚈する必芁がありたす。 コヌディネヌタヌずワヌカヌの蚭蚈により、より倚くのトラフィックを凊理するためにワヌカヌを远加できたす。

    8. XNUMX ぀のクラりドに接続できない
    CloudRetro のむンフラストラクチャは、さたざたな地域のさたざたなクラりド プロバむダヌ (Digital Ocean、Alibaba、カスタム プロバむダヌ) でホストされおいたす。 むンフラストラクチャの Docker コンテナでの実行を有効にし、単䞀のクラりド プロバむダヌにロックされないように bash スクリプトを䜿甚しおネットワヌク蚭定を構成したす。 これを WebRTC の NAT トラバヌサルず組み合わせるこずで、CloudRetro をあらゆるクラりド プラットフォヌム、さらにはあらゆるナヌザヌのマシンに柔軟にデプロむできるようになりたす。

    建築デザむン

    ワヌカヌ (たたは前述のストリヌミング サヌバヌ) は、ゲヌムを増やし、゚ンコヌド パむプラむンを実行し、゚ンコヌドされたメディアをナヌザヌにストリヌミングしたす。 ワヌカヌ むンスタンスは䞖界䞭に分散されおおり、各ワヌカヌは耇数のナヌザヌ セッションを同時に凊理できたす。

    コヌディネヌタヌ 新しいナヌザヌをストリヌミングに最適なワヌカヌずペアリングする責任がありたす。 コヌディネヌタヌは、WebSocket を介しおワヌカヌず察話したす。

    ゲヌム状態のストレヌゞ: すべおのゲヌム状態を集䞭リモヌトストレヌゞで管理したす。 このストレヌゞは、リモヌト セヌブ/ロヌドなどの重芁な機胜を提䟛したす。

    WebRTC 䞊のオヌプン゜ヌス クラりド ゲヌム: p2p、マルチプレむダヌ、れロ遅延
    CloudRetro のトップレベルのアヌキテクチャ

    カスタムスクリプト

    以䞋の図に瀺す手順 1 ず 2 で新しいナヌザヌが CloudRetro を開くず、コヌディネヌタヌず利甚可胜なワヌカヌのリストが最初のペヌゞに芁求されたす。 この埌、ステップ 3 で、クラむアントは HTTP ping リク゚ストを䜿甚しおすべおの候補の遅延を蚈算したす。 この遅延のリストはコヌディネヌタヌに送り返され、コヌディネヌタヌはナヌザヌにサヌビスを提䟛するのに最適なワヌカヌを決定できたす。 以䞋のステップ 4 でゲヌムを䜜成したす。 WebRTC ストリヌミング接続は、ナヌザヌず割り圓おられたワヌカヌの間に確立されたす。
    WebRTC 䞊のオヌプン゜ヌス クラりド ゲヌム: p2p、マルチプレむダヌ、れロ遅延
    アクセス暩取埗埌のナヌザヌスクリプト

    劎働者の䞭には䜕があるのか

    ゲヌムずストリヌミング パむプラむンはワヌカヌ内に分離しお保存され、むンタヌフェむスを通じおそこで情報を亀換したす。 珟圚、この通信はメモリ䞊のデヌタを転送するこずによっお実行されたす。 Golang チャンネル 同じプロセスで。 次の目暙は分離です。 別のプロセスでゲヌムを独立しお起動したす。

    WebRTC 䞊のオヌプン゜ヌス クラりド ゲヌム: p2p、マルチプレむダヌ、れロ遅延
    ワヌカヌコンポヌネントの盞互䜜甚

    メむンコンポヌネント

    • WebRTC ナヌザヌ入力を受け入れ、゚ンコヌドされたメディアをサヌバヌから出力するクラむアント コンポヌネント。
    • ゲヌム゚ミュレヌタ: ゲヌムコンポヌネント。 Libretro ラむブラリのおかげで、システムは同じプロセス内でゲヌムを実行し、メディアず入力ストリヌムを内郚的にむンタヌセプトできたす。
    • ゲヌム内フレヌムがキャプチャされお゚ンコヌダヌに送信されたす。
    • 画像/音声゚ンコヌダ: メディア フレヌムを取埗し、バックグラりンドで゚ンコヌドし、゚ンコヌドされた画像/音声を出力する゚ンコヌド パむプラむン。

    具珟化

    CloudRetro はバックボヌン テクノロゞヌずしお WebRTC に䟝存しおいるため、Golang 実装の詳现に入る前に、WebRTC 自䜓に぀いお話すこずにしたした。 これは驚くべきテクノロゞヌで、ストリヌミング デヌタのレむテンシヌを XNUMX 秒未満にするのに倧いに圹立ちたした。

    WebRTC

    WebRTC は、シンプルな API を䜿甚しおネむティブ モバむル アプリずブラりザヌで高品質のピアツヌピア接続を提䟛するように蚭蚈されおいたす。

    NATトラバヌサル

    WebRTC は、NAT トラバヌサル機胜で知られおいたす。 WebRTC はピアツヌピア通信甚に蚭蚈されおいたす。 その目暙は、NAT ゲヌトりェむずファむアりォヌルを回避しお、ず呌ばれるプロセスを介しおピアツヌピア通信を行う、最も適切な盎接ルヌトを芋぀けるこずです。 ICE。 このプロセスの䞀環ずしお、WebRTC API は STUN サヌバヌを䜿甚しおパブリック IP アドレスを怜玢し、それをリレヌ サヌバヌに転送したす (順番) ダむレクト接続が確立できない堎合。

    ただし、CloudRetro はこの機胜を十分に掻甚しおいたせん。 そのピアツヌピア接続はナヌザヌ間ではなく、ナヌザヌずクラりド サヌバヌの間に存圚したす。 このモデルのサヌバヌ偎では、䞀般的なナヌザヌ デバむスに比べお盎接的な通信制限が少なくなりたす。 これにより、サヌバヌが NAT の背埌にないため、受信ポヌトを事前に開いたり、パブリック IP アドレスを盎接䜿甚したりできたす。

    以前、私はこのプロゞェクトをクラりド ゲヌミングのゲヌム配信プラットフォヌムにしたいず考えおいたした。 このアむデアは、ゲヌム クリ゚ヌタヌがゲヌムずストリヌミング リ゜ヌスを提䟛できるようにするこずでした。 そしおナヌザヌはプロバむダヌず盎接察話するこずになりたす。 この分散型の方法では、CloudRetro はサヌドパヌティのストリヌミング リ゜ヌスをナヌザヌに接続するためのフレヌムワヌクにすぎず、ホストされなくなったずきの拡匵性が向䞊したす。 ここでの WebRTC NAT トラバヌサルの圹割は、サヌドパヌティのストリヌミング リ゜ヌスでのピアツヌピア接続の初期化を促進し、䜜成者がネットワヌクに簡単に接続できるようにするために非垞に重芁です。

    ビデオ圧瞮

    ビデオ圧瞮はパむプラむンに䞍可欠な郚分であり、スムヌズなフロヌに倧きく貢献したす。 VP8/H264 ビデオ ゚ンコヌディングの詳现をすべお知る必芁はありたせんが、抂念を理解するず、ストリヌミング ビデオ速床オプションを理解し、予期しない動䜜をデバッグし、遅延を調敎するのに圹立ちたす。

    ストリヌミング サヌビス甚にビデオを圧瞮するこずは、アルゎリズムによっお、合蚈の゚ンコヌド時間 + ネットワヌク送信時間 + デコヌド時間が可胜な限り短くなるこずを保蚌する必芁があるため、困難です。 さらに、コヌディングプロセスは䞀貫性があり、継続的である必芁がありたす。 䞀郚の゚ンコヌドのトレヌドオフは適甚されたせん。たずえば、ファむル サむズやデコヌド時間よりも長い゚ンコヌド時間を優先したり、䞀貫性のない圧瞮を䜿甚したりするこずはできたせん。

    ビデオ圧瞮の背埌にある考え方は、ナヌザヌが蚱容できるレベルの粟床を維持しながら、䞍芁な情報を削陀するこずです。 個々の静止画像フレヌムを゚ンコヌドするこずに加えお、アルゎリズムは前埌のフレヌムから珟圚のフレヌムを掚枬するため、それらの差分のみが送信されたす。 パックマンの䟋からわかるように、差分ポむントのみが送信されたす。

    WebRTC 䞊のオヌプン゜ヌス クラりド ゲヌム: p2p、マルチプレむダヌ、れロ遅延
    パックマンを䟋にしたビデオフレヌムの比范

    音声圧瞮

    同様に、音声圧瞮アルゎリズムでは、人間が認識できないデヌタは省略されたす。 Opus は珟圚最もパフォヌマンスの高いオヌディオ コヌデックです。 これは、RTP (Real Time Transport Protocol) などの順序付けされたデヌタグラム プロトコルを介しお音声波を送信するように蚭蚈されおいたす。 mp3やaacよりも遅延が少なく、高品質です。 レむテンシは通垞 5  66,5 ミリ秒皋床です。

    Pion、Golang の WebRTC

    パむ䞭間子 は、WebRTC を Golang に提䟛するオヌプン゜ヌス プロゞェクトです。 Pion は、ネむティブ C++ WebRTC ラむブラリの通垞のラッピングの代わりに、より優れたパフォヌマンス、Go 統合、および WebRTC プロトコルでのバヌゞョン管理を備えた WebRTC のネむティブ Golang 実装です。

    このラむブラリでは、倚くの優れた組み蟌み機胜を䜿甚しお XNUMX 秒未満の遅延でストリヌミングするこずもできたす。 STUN、DTLS、SCTPなどの独自の実装がありたす。 QUIC ず WebAssembly を䜿った実隓もいく぀かありたす。 このオヌプン ゜ヌス ラむブラリ自䜓は、優れたドキュメント、ネットワヌク プロトコルの実装、クヌルな䟋を備えた非垞に優れた孊習リ゜ヌスです。

    非垞に情熱的なクリ゚むタヌが率いる Pion コミュニティは非垞に掻発で、WebRTC に぀いお倚くの質の高い議論が行われおいたす。 この技術に興味がある方はぜひご参加ください http://pion.ly/slack – たくさんの新しいこずを孊ぶでしょう。

    Golang で CloudRetro を曞く

    WebRTC 䞊のオヌプン゜ヌス クラりド ゲヌム: p2p、マルチプレむダヌ、れロ遅延
    Go でのワヌカヌの実装

    実際の G​​o チャネル

    Go の矎しいチャネル蚭蚈のおかげで、むベント ストリヌミングず同時実行の問題が倧幅に簡玠化されおいたす。 図にあるように、異なる GoRoutine には耇数のコンポヌネントが䞊行しお実行されたす。 各コンポヌネントはその状態を管理し、チャネルを通じお通信したす。 Golang の遞択的アサヌションにより、ゲヌム内で毎回 XNUMX ぀のアトミック むベントが匷制的に凊理されたす (ゲヌム ティック)。 これは、この蚭蚈ではロックが必芁ないこずを意味したす。 たずえば、ナヌザヌが保存するずきは、ゲヌム状態の完党なスナップショットが必芁です。 この状態は、保存が完了するたでログむン状態のたた継続する必芁がありたす。 各ゲヌム ティック䞭、バック゚ンドは保存操䜜たたは入力操䜜のみを凊理できるため、プロセスがスレッド セヌフになりたす。

    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 ずマルチプレむダヌのナヌスケヌスに完党に適合したす。 このパタヌンに埓っお、XNUMX ぀の郚屋内のすべおのナヌザヌ入力は䞭倮の入口チャネルに組み蟌たれたす。 その埌、ゲヌム メディアが同じ郚屋内のすべおのナヌザヌに展開されたす。 このようにしお、異なるナヌザヌの耇数のゲヌム セッション間でゲヌム状態を分割するこずができたす。

    WebRTC 䞊のオヌプン゜ヌス クラりド ゲヌム: p2p、マルチプレむダヌ、れロ遅延
    異なるセッション間の同期

    Golangの欠点

    Golang は完璧ではありたせん。 チャンネルが遅いです。 ブロッキングず比范するず、Go チャネルは同時むベ​​ントやスレッド化されたむベントを凊理する簡単な方法であるだけですが、チャネルは最高のパフォヌマンスを提䟛したせん。 チャネルの䞋には耇雑なブロッキング ロゞックがありたす。 そこで、パフォヌマンスを最適化するためにチャネルを眮き換えるずきにロックずアトミック倀を再適甚しお、実装にいく぀かの調敎を加えたした。

    さらに、Golang のガベヌゞ コレクタヌは管理されおいないため、疑わしいほど長い䞀時停止が発生するこずがありたす。 これは、リアルタむム ストリヌミング アプリケヌションに倧きな干枉を䞎えたす。

    Cgo

    このプロゞェクトでは、メディア圧瞮には既存のオヌプン ゜ヌス Golang VP8/H264 ラむブラリを、ゲヌム ゚ミュレヌタには Libretro を䜿甚したす。 これらのラむブラリはすべお、Go の C ラむブラリの単なるラッパヌです。 Cgo。 デメリットの䞀郚を以䞋に挙げたす デむブ・チェむニヌによるこの投皿。 遭遇した問題:

    • Golang RecoveryCrash を䜿甚しおも CGO でクラッシュを捕捉できない。
    • CGO で詳现な問題を怜出できない堎合、パフォヌマンスのボトルネックを特定できたせん。

    たずめ

    クラりド ゲヌム サヌビスを理解し、オンラむンで友達ず懐かしいレトロ ゲヌムをプレむできるプラットフォヌムを䜜成するずいう目暙を達成したした。 このプロゞェクトは、Pion 図曞通ず Pion コミュニティの支揎がなければ䞍可胜でした。 集䞭的な開発に非垞に感謝しおいたす。 WebRTC ず Pion が提䟛するシンプルな API により、シヌムレスな統合が保蚌されたした。 ピアツヌピア (P2P) 通信に関する予備知識がたったくなかったにもかかわらず、私の最初の抂念実蚌は同じ週にリリヌスされたした。

    統合の容易さにもかかわらず、P2P ストリヌミングは実際、コンピュヌタヌ サむ゚ンスにおいお非垞に耇雑な領域です。 圌女は、ピアツヌピア セッションを䜜成するために、IP や NAT などの長幎にわたるネットワヌク アヌキテクチャの耇雑さに察凊する必芁がありたす。 このプロゞェクトに取り組んでいる間、私はネットワヌキングずパフォヌマンスの最適化に関する倚くの貎重な知識を埗るこずができたので、皆さんも WebRTC を䜿甚しお P2P 補品を構築しおみるこずをお勧めしたす。

    CloudRetro は、レトロゲヌマヌずしおの私の芳点から予想したすべおのナヌスケヌスに察応したす。 ただし、ネットワヌクの信頌性ずパフォヌマンスを向䞊させたり、より高品質のゲヌム グラフィックスを提䟛したり、ナヌザヌ間でゲヌムを共有したりする機胜など、プロゞェクトには改善できる点がたくさんあるず思いたす。 私はこれに䞀生懞呜取り組んでいたす。 埓っおください プロゞェクト そしお気に入ったらサポヌトしおください。

出所 habr.com

コメントを远加したす