ΠžΠ±Π»Π°Ρ‡Π½Ρ‹ΠΉ Π³Π΅ΠΉΠΌΠΈΠ½Π³ с ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ исходным ΠΊΠΎΠ΄ΠΎΠΌ Π½Π° WebRTC: p2p, ΠΌΡƒΠ»ΡŒΡ‚ΠΈΠΏΠ»Π΅Π΅Ρ€, zero latency

ΠžΠ±Π»Π°Ρ‡Π½Ρ‹ΠΉ Π³Π΅ΠΉΠΌΠΈΠ½Π³ с ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ исходным ΠΊΠΎΠ΄ΠΎΠΌ Π½Π° WebRTC: p2p, ΠΌΡƒΠ»ΡŒΡ‚ΠΈΠΏΠ»Π΅Π΅Ρ€, zero latency
ПО ΠΊΠ°ΠΊ услуга, инфраструктура ΠΊΠ°ΠΊ услуга, ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° ΠΊΠ°ΠΊ услуга, коммуникационная ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° ΠΊΠ°ΠΊ услуга, Π²ΠΈΠ΄Π΅ΠΎΠΊΠΎΠ½Ρ„Π΅Ρ€Π΅Π½Ρ†ΠΈΠΈ ΠΊΠ°ΠΊ услуга, Π° Ρ‡Ρ‚ΠΎ насчСт ΠΎΠ±Π»Π°Ρ‡Π½Ρ‹Ρ… ΠΈΠ³Ρ€ ΠΊΠ°ΠΊ услуги? Π£ΠΆΠ΅ Π±Ρ‹Π»ΠΎ прСдпринято нСсколько ΠΏΠΎΠΏΡ‹Ρ‚ΠΎΠΊ создания ΠΎΠ±Π»Π°Ρ‡Π½Ρ‹Ρ… ΠΈΠ³Ρ€ (Cloud Gaming), Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Stadia, Π½Π΅Π΄Π°Π²Π½ΠΎ запущСнная ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠ΅ΠΉ Google. Stadia Π½Π΅ Π½ΠΎΠ²ΠΈΡ‡ΠΎΠΊ Π² WebRTC, Π½ΠΎ ΠΌΠΎΠ³ΡƒΡ‚ Π»ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ WebRTC Ρ‚Π°ΠΊ ΠΆΠ΅?

Π’Ρ…Π°Π½ΡŒ НгуСн (Thanh Nguyen) Ρ€Π΅ΡˆΠΈΠ» ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ эту Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π½Π° своСм опСнсорсном ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ CloudRetro. CloudRetro основан Π½Π° Pion, популярной WebRTC Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ Π½Π° Π±Π°Π·Π΅ Go (спасибо Π¨ΠΎΠ½Ρƒ ΠΈΠ· Π³Ρ€ΡƒΠΏΠΏΡ‹ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² Pion Π·Π° ΠΏΠΎΠΌΠΎΡ‰ΡŒ Π² ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ΅ этой ΡΡ‚Π°Ρ‚ΡŒΠΈ). Π’ Π΄Π°Π½Π½ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅ Π’Ρ…Π°Π½ΡŒ Π΄Π΅Π»Π°Π΅Ρ‚ ΠΎΠ±Π·ΠΎΡ€ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ своСго ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, Π° Ρ‚Π°ΠΊΠΆΠ΅ рассказываСт, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠ³ΠΎ ΠΎΠ½ ΡƒΠ·Π½Π°Π» ΠΈ с ΠΊΠ°ΠΊΠΈΠΌΠΈ Ρ‡Π΅Π»Π»Π΅Π½Π΄ΠΆΠ°ΠΌΠΈ столкнулся Π²ΠΎ врСмя Ρ€Π°Π±ΠΎΡ‚Ρ‹.

ВступлСниС

Π’ ΠΏΡ€ΠΎΡˆΠ»ΠΎΠΌ Π³ΠΎΠ΄Ρƒ, ΠΊΠΎΠ³Π΄Π° Google анонсировал Stadia, ΠΌΠ½Π΅ просто снСсло ΠΊΡ€Ρ‹ΡˆΡƒ. ИдСя Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Π° ΠΈ ΠΈΠ½Π½ΠΎΠ²Π°Ρ†ΠΈΠΎΠ½Π½Π°, Ρ‡Ρ‚ΠΎ я постоянно задавался вопросом, ΠΊΠ°ΠΊ Ρ‚Π°ΠΊΠΎΠ΅ Π²ΠΎΠΎΠ±Ρ‰Π΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… тСхнологиях. Π–Π΅Π»Π°Π½ΠΈΠ΅ Π»ΡƒΡ‡ΡˆΠ΅ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ Π² этой Ρ‚Π΅ΠΌΠ΅ ΠΏΠΎΠ±ΡƒΠ΄ΠΈΠ»ΠΎ мСня ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ свою Π²Π΅Ρ€ΡΠΈΡŽ опСнсорсной ΠΎΠ±Π»Π°Ρ‡Π½ΠΎΠΉ ΠΈΠ³Ρ€Ρ‹. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π±Ρ‹Π» просто фантастичСский. НиТС я Ρ…ΠΎΡ‚Π΅Π» Π±Ρ‹ ΠΏΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ процСссом Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π½Π°Π΄ ΠΌΠΎΠΈΠΌ Π³ΠΎΠ΄ΠΈΡ‡Π½Ρ‹ΠΌ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠΌ.

TLDR: короткая слайд-вСрсия с основными ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ

ΠŸΠΎΡ‡Π΅ΠΌΡƒ Π·Π° ΠΎΠ±Π»Π°Ρ‡Π½Ρ‹ΠΌΠΈ ΠΈΠ³Ρ€Π°ΠΌΠΈ Π±ΡƒΠ΄ΡƒΡ‰Π΅Π΅

Π― Π²Π΅Ρ€ΡŽ, Ρ‡Ρ‚ΠΎ Cloud Gaming скоро станСт Π½ΠΎΠ²Ρ‹ΠΌ ΠΏΠΎΠΊΠΎΠ»Π΅Π½ΠΈΠ΅ΠΌ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠ³Ρ€, Π½ΠΎ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… областСй ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠΈ. ΠžΠ±Π»Π°Ρ‡Π½Ρ‹Π΅ ΠΈΠ³Ρ€Ρ‹ – это Π²Π΅Ρ€ΡˆΠΈΠ½Π° ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ‚/сСрвСр. Вакая модСль максимизируСт ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ бэкэндом ΠΈ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ Ρ„Ρ€ΠΎΠ½Ρ‚Π΅Π½Π΄Π° Π·Π° счСт размСщСния ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠΉ Π»ΠΎΠ³ΠΈΠΊΠΈ Π½Π° ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠΌ сСрвСрС ΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²ΠΎΠΉ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ/Π°ΡƒΠ΄ΠΈΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ. Π‘Π΅Ρ€Π²Π΅Ρ€ выполняСт Ρ‚ΡΠΆΠ΅Π»ΡƒΡŽ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ, поэтому ΠΊΠ»ΠΈΠ΅Π½Ρ‚ большС Π½Π΅ зависит ΠΎΡ‚ Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½Ρ‹Ρ… ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ.

Google Stadia, ΠΏΠΎ сути, позволяСт ΠΈΠ³Ρ€Π°Ρ‚ΡŒ Π² AAA-ΠΈΠ³Ρ€Ρ‹ (Ρ‚.Π΅. высококлассныС ΠΈΠ³Ρ€Ρ‹-блокбастСры) Π½Π° интСрфСйсС Π²Ρ€ΠΎΠ΄Π΅ YouTube. Π’Π° ΠΆΠ΅ мСтодология ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½Π° ΠΈ ΠΊ Π΄Ρ€ΡƒΠ³ΠΈΠΌ тяТСлым ΠΎΡ„Ρ„Π»Π°ΠΉΠ½ΠΎΠ²Ρ‹ΠΌ прилоТСниям, Ρ‚Π°ΠΊΠΈΠΌ ΠΊΠ°ΠΊ опСрационная систСма ΠΈΠ»ΠΈ 2D/3D графичСский Π΄ΠΈΠ·Π°ΠΉΠ½ ΠΈ Ρ‚.Π΄. Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΌΡ‹ ΠΌΠΎΠ³Π»ΠΈ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ ΠΈΡ… Π½Π° устройствах с Π½ΠΈΠ·ΠΊΠΈΠΌΠΈ тСхничСскими характСристиками Π½Π° Ρ€Π°Π·Π½Ρ‹Ρ… ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ….

ΠžΠ±Π»Π°Ρ‡Π½Ρ‹ΠΉ Π³Π΅ΠΉΠΌΠΈΠ½Π³ с ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ исходным ΠΊΠΎΠ΄ΠΎΠΌ Π½Π° WebRTC: p2p, ΠΌΡƒΠ»ΡŒΡ‚ΠΈΠΏΠ»Π΅Π΅Ρ€, zero latency
Π‘ΡƒΠ΄ΡƒΡ‰Π΅Π΅ этой Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ: прСдставляСтС, Ссли Π±Ρ‹ Microsoft Windows 10 Ρ€Π°Π±ΠΎΡ‚Π°Π» Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅ Chrome?

ΠžΠ±Π»Π°Ρ‡Π½Ρ‹Π΅ ΠΈΠ³Ρ€Ρ‹ тСхничСски слоТны

Π“Π΅ΠΉΠΌΠΈΠ½Π³ – ΠΎΠ΄Π½Π° ΠΈΠ· Ρ‚Π΅Ρ… Ρ€Π΅Π΄ΠΊΠΈΡ… областСй, Π³Π΄Π΅ трСбуСтся постоянная быстрая рСакция ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ. Если ΠΈΠ·Ρ€Π΅Π΄ΠΊΠ° ΠΌΡ‹ встрСчаСмся с Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ Π² 2 сСкунды ΠΏΡ€ΠΈ ΠΊΠ»ΠΈΠΊΠ΅ Π½Π° страницС, это ΠΏΡ€ΠΈΠ΅ΠΌΠ»Π΅ΠΌΠΎ. Π’ΠΈΠ΄Π΅ΠΎΠΏΠΎΡ‚ΠΎΠΊΠΈ Π² прямом эфирС, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, ΠΎΡ‚ΡΡ‚Π°ΡŽΡ‚ Π½Π° нСсколько сСкунд, Π½ΠΎ всС Ρ€Π°Π²Π½ΠΎ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΡŽΡ‚ достаточноС удобство Π² использовании. Однако, Ссли ΠΈΠ³Ρ€Π° часто задСрТиваСтся Π½Π° 500 мс, ΠΈΠ³Ρ€Π°Ρ‚ΡŒ просто Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ. Наша Ρ†Π΅Π»ΡŒ – Π΄ΠΎΡΡ‚ΠΈΡ‡ΡŒ Ρ‡Ρ€Π΅Π·Π²Ρ‹Ρ‡Π°ΠΉΠ½ΠΎ Π½ΠΈΠ·ΠΊΠΎΠΉ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°Π·Ρ€Ρ‹Π² ΠΌΠ΅ΠΆΠ΄Ρƒ Π²Π²ΠΎΠ΄ΠΎΠΌ ΠΈ ΠΌΠ΅Π΄ΠΈΠ° Π±Ρ‹Π» ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ мСньшС. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΊ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²ΠΎΠΌΡƒ Π²ΠΈΠ΄Π΅ΠΎ здСсь Π½Π΅ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌ.

ΠžΠ±Π»Π°Ρ‡Π½Ρ‹ΠΉ Π³Π΅ΠΉΠΌΠΈΠ½Π³ с ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ исходным ΠΊΠΎΠ΄ΠΎΠΌ Π½Π° WebRTC: p2p, ΠΌΡƒΠ»ΡŒΡ‚ΠΈΠΏΠ»Π΅Π΅Ρ€, zero latency
ΠžΠ±Ρ‰ΠΈΠΉ шаблон ΠΎΠ±Π»Π°Ρ‡Π½ΠΎΠΉ ΠΈΠ³Ρ€Ρ‹

ΠžΠΏΠ΅Π½ΡΠΎΡ€ΡΠ½Ρ‹ΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ CloudRetro

Π― Ρ€Π΅ΡˆΠΈΠ» ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ тСстовый ΠΎΠ±Ρ€Π°Π·Π΅Ρ† ΠΎΠ±Π»Π°Ρ‡Π½ΠΎΠΉ ΠΈΠ³Ρ€Ρ‹, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π»ΠΈ всё это ΠΏΡ€ΠΈ Ρ‚Π°ΠΊΠΈΡ… ТСстких сСтСвых ограничСниях. Для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ я Π²Ρ‹Π±Ρ€Π°Π» Golang, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ это Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π·Π½Π°ΠΊΠΎΠΌΡ‹ΠΉ ΠΌΠ½Π΅ язык ΠΈ Ρ…ΠΎΡ€ΠΎΡˆΠΎ подходящий для Π΄Π°Π½Π½ΠΎΠΉ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠΌ Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°ΠΌ, ΠΊΠ°ΠΊ Π²Ρ‹ΡΡΠ½ΠΈΠ»ΠΎΡΡŒ ΠΏΠΎΠ·ΠΆΠ΅. Go простой ΠΈ развиваСтся ΠΎΡ‡Π΅Π½ΡŒ быстро; ΠΊΠ°Π½Π°Π»Ρ‹ Π² Go ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎ подходят для управлСния ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒΡŽ.

ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ CloudRetro.io – ΠΎΠ±Π»Π°Ρ‡Π½Ρ‹ΠΉ ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠΉ сСрвис с ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ исходным ΠΊΠΎΠ΄ΠΎΠΌ для Ρ€Π΅Ρ‚Ρ€ΠΎ-ΠΈΠ³Ρ€Ρ‹. ЦСль ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° – привнСсти Π² Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹Π΅ Ρ€Π΅Ρ‚Ρ€ΠΎ-ΠΈΠ³Ρ€Ρ‹ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΊΠΎΠΌΡ„ΠΎΡ€Ρ‚Π½Ρ‹Π΅ ΠΈΠ³Ρ€ΠΎΠ²Ρ‹Π΅ ощущСния ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΌΡƒΠ»ΡŒΡ‚ΠΈΠΏΠ»Π΅Π΅Ρ€.
ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ ΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ΡŒΡΡ с ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ здСсь: https://github.com/giongto35/cloud-game.

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ CloudRetro

Для дСмонстрации всСй ΠΌΠΎΡ‰ΠΈ ΠΎΠ±Π»Π°Ρ‡Π½Ρ‹Ρ… ΠΈΠ³Ρ€ Π² CloudRetro ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Ρ€Π΅Ρ‚Ρ€ΠΎ-ΠΈΠ³Ρ€Ρ‹. Π§Ρ‚ΠΎ позволяСт ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ мноТСство ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΈΠ³Ρ€ΠΎΠ²Ρ‹Ρ… Π²ΠΏΠ΅Ρ‡Π°Ρ‚Π»Π΅Π½ΠΈΠΉ.

  • ΠŸΠΎΡ€Ρ‚Π°Ρ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ ΠΈΠ³Ρ€Ρ‹
    • МгновСнноС воспроизвСдСниС ΠΏΡ€ΠΈ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠΈ страницы; Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΈ установка Π½Π΅ Π½ΡƒΠΆΠ½Ρ‹
    • Π Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π² мобильном Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ для запуска Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Π½ΠΈΠΊΠ°ΠΊΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ΅ обСспСчСниС

  • Π˜Π³Ρ€ΠΎΠ²Ρ‹Π΅ сСансы ΠΌΠΎΠΆΠ½ΠΎ совмСстно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π½Π° Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… устройствах ΠΈ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π² ΠΎΠ±Π»Π°ΠΊΠ΅ для ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ Π²Ρ…ΠΎΠ΄Π°
  • Π˜Π³Ρ€Ρƒ ΠΌΠΎΠΆΠ½ΠΎ ΡΡ‚Ρ€ΠΈΠΌΠΈΡ‚ΡŒ, Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ³Ρ€Π°Ρ‚ΡŒ Π² Π½Π΅Π΅ сразу нСсколькими ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌΠΈ:
    • Crowdplay Ρ‚ΠΈΠΏΠ° TwitchPlayPokemon, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π±ΠΎΠ»Π΅Π΅ кросплатформСнный ΠΈ Π±ΠΎΠ»Π΅Π΅ Ρ€ΠΈΠ°Π»Ρ‚Π°ΠΉΠΌΠΎΠ²Ρ‹ΠΉ
    • ΠžΡ„Ρ„Π»Π°ΠΈΜ†Π½ ΠΈΠ³Ρ€Ρ‹ Π² ΠΎΠ½Π»Π°ΠΈΜ†Π½Π΅. Π˜Π³Ρ€Π°Ρ‚ΡŒ ΠΌΠΎΠ³ΡƒΡ‚ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΈΜ† Π±Π΅Π· настройки сСти. Π’ Samurai Shodown Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ³Ρ€Π°Ρ‚ΡŒ 2 ΠΈΠ³Ρ€ΠΎΠΊΠ°ΠΌ ΠΏΠΎ сСти CloudRetro

    ΠžΠ±Π»Π°Ρ‡Π½Ρ‹ΠΉ Π³Π΅ΠΉΠΌΠΈΠ½Π³ с ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ исходным ΠΊΠΎΠ΄ΠΎΠΌ Π½Π° WebRTC: p2p, ΠΌΡƒΠ»ΡŒΡ‚ΠΈΠΏΠ»Π΅Π΅Ρ€, zero latency
    Π”Π΅ΠΌΠΎ-вСрсия ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠΉ ΠΎΠ½Π»Π°ΠΉΠ½-ΠΈΠ³Ρ€Ρ‹ Π½Π° Ρ€Π°Π·Π½Ρ‹Ρ… устройствах

    Π˜Π½Ρ„Ρ€Π°ΡΡ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π°

    ВрСбования ΠΈ стСк Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ

    НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ список Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ я установил ΠΏΠ΅Ρ€Π΅Π΄ Π½Π°Ρ‡Π°Π»ΠΎΠΌ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°.

    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. ΠšΠΎΠΌΠ½Π°Ρ‚Ρ‹ для ΠΌΡƒΠ»ΡŒΡ‚ΠΈΠΏΠ»Π΅Π΅Ρ€Π°, crowd play ΠΈ внСшнСС связываниС (deep-link) с ΠΈΠ³Ρ€ΠΎΠΉ
    CloudRetro ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ мноТСство Π½ΠΎΠ²Ρ‹Ρ… Π³Π΅ΠΉΠΌΠΏΠ»Π΅Π΅Π², Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ CrowdPlay ΠΈ Online MultiPlayer для Ρ€Π΅Ρ‚Ρ€ΠΎ-ΠΈΠ³Ρ€. Если нСсколько ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ ΠΎΡ‚ΠΊΡ€ΠΎΡŽΡ‚ ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ deep-link Π½Π° Ρ€Π°Π·Π½Ρ‹Ρ… ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°Ρ…, ΠΎΠ½ΠΈ увидят ΠΎΠ΄Π½Ρƒ ΠΈ Ρ‚Ρƒ ΠΆΠ΅ Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½ΡƒΡŽ ΠΈΠ³Ρ€Ρƒ ΠΈ Π΄Π°ΠΆΠ΅ смогут ΠΏΡ€ΠΈΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒΡΡ ΠΊ Π½Π΅ΠΉ.

    Π‘ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ, состояния ΠΈΠ³Ρ€Ρ‹ хранятся Π² ΠΎΠ±Π»Π°Ρ‡Π½ΠΎΠΌ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅. Π­Ρ‚ΠΎ позволяСт ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ‚ΡŒ ΠΈΠ³Ρ€Ρƒ Π² любоС врСмя Π½Π° любом Π΄Ρ€ΡƒΠ³ΠΎΠΌ устройствС.

    7. Π“ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅
    Как ΠΈ любой SAAS Π² настоящСС врСмя, ΠΎΠ±Π»Π°Ρ‡Π½Ρ‹Π΅ ΠΈΠ³Ρ€Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ спроСктированы Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π±Ρ‹Ρ‚ΡŒ Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½ΠΎ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΌΠΈ. ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡ Β«ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ΠΎΡ€-Π²ΠΎΡ€ΠΊΠ΅Ρ€Β» позволяСт Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ большС Π²ΠΎΡ€ΠΊΠ΅Ρ€ΠΎΠ², Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±ΡΠ»ΡƒΠΆΠΈΠ²Π°Ρ‚ΡŒ больший Ρ‚Ρ€Π°Ρ„ΠΈΠΊ.

    8. НСт привязки ΠΊ ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΎΠ±Π»Π°ΠΊΡƒ
    Π˜Π½Ρ„Ρ€Π°ΡΡ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° CloudRetro размСщаСтся Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΎΠ±Π»Π°Ρ‡Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€Π°Ρ… (Digital Ocean, Alibaba, ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€) для Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ€Π΅Π³ΠΈΠΎΠ½ΠΎΠ². Π― Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€ΡƒΡŽ запуск Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅ Docker для инфраструктуры ΠΈ Π½Π°ΡΡ‚Ρ€Π°ΠΈΠ²Π°ΡŽ сСтСвыС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ bash-скрипта, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ зависимости ΠΎΡ‚ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΎΠ±Π»Π°Ρ‡Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€Π°. БочСтая это с NAT Traversal Π² WebRTC, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π³ΠΈΠ±ΠΊΠΎΡΡ‚ΡŒ для развСртывания CloudRetro Π½Π° любой ΠΎΠ±Π»Π°Ρ‡Π½ΠΎΠΉ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅ ΠΈ Π΄Π°ΠΆΠ΅ Π½Π° ΠΌΠ°ΡˆΠΈΠ½Π°Ρ… любого ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ.

    АрхитСктурный Π΄ΠΈΠ·Π°ΠΉΠ½

    Π’ΠΎΡ€ΠΊΠ΅Ρ€: (ΠΈΠ»ΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²Ρ‹ΠΉ сСрвСр, упомянутый Π²Ρ‹ΡˆΠ΅) ΠΌΠ½ΠΎΠΆΠΈΡ‚ ΠΈΠ³Ρ€Ρ‹, запускаСт ΠΊΠΎΠ΄ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½ ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ Π·Π°ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΌΠ΅Π΄ΠΈΠ° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ. Π˜Π½ΡΡ‚Π°Π½ΡΡ‹ Π²ΠΎΡ€ΠΊΠ΅Ρ€Π° Ρ€Π°ΡΠΏΡ€ΠΎΡΡ‚Ρ€Π°Π½ΡΡŽΡ‚ΡΡ ΠΏΠΎ всСму ΠΌΠΈΡ€Ρƒ, ΠΈ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Π²ΠΎΡ€ΠΊΠ΅Ρ€ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ нСсколько ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… сСссий ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ.

    ΠšΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ΠΎΡ€: ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° сопряТСниС Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ с Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ подходящим Π²ΠΎΡ€ΠΊΠ΅Ρ€ΠΎΠΌ для ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²ΠΎΠΉ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ. ΠšΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ΠΎΡ€ взаимодСйствуСт с Π²ΠΎΡ€ΠΊΠ΅Ρ€Π°ΠΌΠΈ Ρ‡Π΅Ρ€Π΅Π· WebSocket.

    Π₯Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ ΠΈΠ³Ρ€ΠΎΠ²Ρ‹Ρ… состояний: Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½ΠΎΠ΅ ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠ΅ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ для всСх состояний ΠΈΠ³Ρ€Ρ‹. Π­Ρ‚ΠΎ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ обСспСчиваСт Ρ‚Π°ΠΊΠΈΠ΅ Π²Π°ΠΆΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠ°ΠΊ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠ΅ сохранСниС/Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ°.

    ΠžΠ±Π»Π°Ρ‡Π½Ρ‹ΠΉ Π³Π΅ΠΉΠΌΠΈΠ½Π³ с ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ исходным ΠΊΠΎΠ΄ΠΎΠΌ Π½Π° WebRTC: p2p, ΠΌΡƒΠ»ΡŒΡ‚ΠΈΠΏΠ»Π΅Π΅Ρ€, zero latency
    ВСрхнСуровнСвая Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π° CloudRetro

    ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ сцСнарий

    Когда Π½ΠΎΠ²Ρ‹ΠΉ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ CloudRetro Π½Π° ΡˆΠ°Π³Π°Ρ… 1 ΠΈ 2, ΠΏΠΎΠΊΠ°Π·Π°Π½Π½Ρ‹Ρ… Π½Π° рисункС Π½ΠΈΠΆΠ΅, ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ΠΎΡ€ вмСстС со списком доступных Π²ΠΎΡ€ΠΊΠ΅Ρ€ΠΎΠ² Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅Ρ‚ΡΡ Π½Π° ΠΏΠ΅Ρ€Π²ΡƒΡŽ страницу. ПослС этого Π½Π° шагС 3 ΠΊΠ»ΠΈΠ΅Π½Ρ‚ рассчитываСт Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΈ для всСх ΠΊΠ°Π½Π΄ΠΈΠ΄Π°Ρ‚ΠΎΠ² с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ HTTP запроса ping. Π­Ρ‚ΠΎΡ‚ список Π·Π°Π΄Π΅Ρ€ΠΆΠ΅ΠΊ Π·Π°Ρ‚Π΅ΠΌ отправляСтся ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ΠΎΡ€Ρƒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ ΠΌΠΎΠ³ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ подходящСго Π²ΠΎΡ€ΠΊΠ΅Ρ€Π° для обслуТивания ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ. На шагС 4 Π½ΠΈΠΆΠ΅ создаСтся ΠΈΠ³Ρ€Π°. ΠœΠ΅ΠΆΠ΄Ρƒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ ΠΈ Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹ΠΌ Π²ΠΎΡ€ΠΊΠ΅Ρ€ΠΎΠΌ устанавливаСтся ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²ΠΎΠ΅ соСдинСниС WebRTC.
    ΠžΠ±Π»Π°Ρ‡Π½Ρ‹ΠΉ Π³Π΅ΠΉΠΌΠΈΠ½Π³ с ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ исходным ΠΊΠΎΠ΄ΠΎΠΌ Π½Π° WebRTC: p2p, ΠΌΡƒΠ»ΡŒΡ‚ΠΈΠΏΠ»Π΅Π΅Ρ€, zero latency
    ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ сцСнарий послС получСния доступа

    Π§Ρ‚ΠΎ Π²Π½ΡƒΡ‚Ρ€ΠΈ Π²ΠΎΡ€ΠΊΠ΅Ρ€Π°

    Π˜Π³Ρ€ΠΎΠ²Ρ‹Π΅ ΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²Ρ‹Π΅ ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½Ρ‹ хранятся Π²Π½ΡƒΡ‚Ρ€ΠΈ Π²ΠΎΡ€ΠΊΠ΅Ρ€Π° ΠΈΠ·ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎ ΠΈ ΠΎΠ±ΠΌΠ΅Π½ΠΈΠ²Π°ΡŽΡ‚ΡΡ Ρ‚Π°ΠΌ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ Ρ‡Π΅Ρ€Π΅Π· интСрфСйс. Π’ настоящСС врСмя эта связь осущСствляСтся посрСдством ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π΄Π°Π½Π½Ρ‹Ρ… Π² памяти ΠΏΠΎ ΠΊΠ°Π½Π°Π»Π°ΠΌ Golang Π² Ρ‚ΠΎΠΌ ΠΆΠ΅ процСссС. Π‘Π»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ Ρ†Π΅Π»ΡŒΡŽ являСтся сСгрСгация, Ρ‚.Π΅. нСзависимый запуск ΠΈΠ³Ρ€Ρ‹ Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ процСссС.

    ΠžΠ±Π»Π°Ρ‡Π½Ρ‹ΠΉ Π³Π΅ΠΉΠΌΠΈΠ½Π³ с ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ исходным ΠΊΠΎΠ΄ΠΎΠΌ Π½Π° WebRTC: p2p, ΠΌΡƒΠ»ΡŒΡ‚ΠΈΠΏΠ»Π΅Π΅Ρ€, zero latency
    ВзаимодСйствиС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² Π²ΠΎΡ€ΠΊΠ΅Ρ€Π°

    ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠ΅:

    • WebRTC: клиСнтский ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚, ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‰ΠΈΠΉ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ Π²Π²ΠΎΠ΄ ΠΈ выводящий Π·Π°ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΌΠ΅Π΄ΠΈΠ° с сСрвСра.
    • Π˜Π³Ρ€ΠΎΠ²ΠΎΠΉ эмулятор: ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚. Благодаря Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ Libretro систСма способна Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ ΠΈΠ³Ρ€Ρƒ Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ процСсса ΠΈ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΌΠ΅Π΄ΠΈΠ° ΠΈ ΠΏΠΎΡ‚ΠΎΠΊ Π²Π²ΠΎΠ΄Π°.
    • Π’Π½ΡƒΡ‚Ρ€ΠΈΠΈΠ³Ρ€ΠΎΠ²Ρ‹Π΅ ΠΊΠ°Π΄Ρ€Ρ‹ Π·Π°Ρ…Π²Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΈ ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡŽΡ‚ΡΡ Π² ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊ.
    • Π˜Π·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅/Π°ΡƒΠ΄ΠΈΠΎ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊ: ΠΊΠΎΠ΄ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΌΠ΅Π΄ΠΈΠ°ΠΊΠ°Π΄Ρ€Ρ‹, ΠΊΠΎΠ΄ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΈΡ… Π² Ρ„ΠΎΠ½ΠΎΠ²ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅ ΠΈ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ Π·Π°ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ изобраТСния/Π°ΡƒΠ΄ΠΈΠΎ.

    РСализация

    CloudRetro полагаСтся Π½Π° WebRTC ΠΊΠ°ΠΊ Π½Π° ΠΌΠ°Π³ΠΈΡΡ‚Ρ€Π°Π»ΡŒΠ½ΡƒΡŽ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΡŽ, поэтому ΠΏΠ΅Ρ€Π΅Π΄ Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊ ΡƒΠ³Π»ΡƒΠ±ΠΈΡ‚ΡŒΡΡ Π² подробности Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π½Π° Golang, я Ρ€Π΅ΡˆΠΈΠ» Ρ€Π°ΡΡΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΎ самом WebRTC. Π­Ρ‚ΠΎ ΠΏΠΎΡ‚Ρ€ΡΡΠ°ΡŽΡ‰Π°Ρ тСхнология, которая сильно ΠΏΠΎΠΌΠΎΠ³Π»Π° ΠΌΠ½Π΅ Π² достиТСнии Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²ΠΎΠΉ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π΄Π°Π½Π½Ρ‹Ρ… Ρ€Π°Π²Π½ΠΎΠΉ всСго лишь Π΄ΠΎΠ»Π΅ сСкунды.

    WebRTC

    WebRTC ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для обСспСчСния высококачСствСнных ΠΎΠ΄Π½ΠΎΡ€Π°Π½Π³ΠΎΠ²Ρ‹Ρ… соСдинСний Π½Π° Π½Π°Ρ‚ΠΈΠ²Π½ΠΎΠΌ мобильном ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΠΈ Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π°Ρ… с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ простых API.

    NAT Traversal

    WebRTC извСстСн своСй Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ NAT Traversal. WebRTC ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для ΠΎΠ΄Π½ΠΎΡ€Π°Π½Π³ΠΎΠ²ΠΎΠΉ ΠΊΠΎΠΌΠΌΡƒΠ½ΠΈΠΊΠ°Ρ†ΠΈΠΈ. Π•Π³ΠΎ Ρ†Π΅Π»ΡŒ – Π½Π°ΠΉΡ‚ΠΈ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ подходящий прямой ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚, избСгая NAT-шлюзов ΠΈ брандмауэров для ΠΎΠ΄Π½ΠΎΡ€Π°Π½Π³ΠΎΠ²ΠΎΠΉ связи Ρ‡Π΅Ρ€Π΅Π· процСсс ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ ICE. Π’ Ρ€Π°ΠΌΠΊΠ°Ρ… этого процСсса API WebRTC находят ваш ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹ΠΉ IP-адрСс с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ сСрвСров STUN ΠΈ ΠΏΠ΅Ρ€Π΅Π°Π΄Ρ€Π΅ΡΠΎΠ²Ρ‹Π²Π°ΡŽΡ‚ Π΅Π³ΠΎ Π½Π° сСрвСр рСтрансляции (TURN), ΠΊΠΎΠ³Π΄Π° прямоС соСдинСниС Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ установлСно.

    Однако CloudRetro Π½Π΅ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ эту Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ. Π•Π³ΠΎ ΠΎΠ΄Π½ΠΎΡ€Π°Π½Π³ΠΎΠ²Ρ‹Π΅ соСдинСния ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Π½Π΅ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌΠΈ, Π° ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌΠΈ ΠΈ ΠΎΠ±Π»Π°Ρ‡Π½Ρ‹ΠΌΠΈ сСрвСрами. БСрвСрная Ρ‡Π°ΡΡ‚ΡŒ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΈΠΌΠ΅Π΅Ρ‚ мСньшС ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ Π½Π° ΠΏΡ€ΡΠΌΡƒΡŽ связь, Ρ‡Π΅ΠΌ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ΅ устройство. Π­Ρ‚ΠΎ позволяСт Π΄Π΅Π»Π°Ρ‚ΡŒ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ входящих ΠΏΠΎΡ€Ρ‚ΠΎΠ² ΠΈΠ»ΠΈ использованиС ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹Ρ… IP-адрСсов Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ сСрвСр Π½Π΅ находится Π·Π° NAT.

    РаньшС я Ρ…ΠΎΡ‚Π΅Π» ΠΏΡ€Π΅Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π² ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡƒ распространСния ΠΈΠ³Ρ€ для Cloud Gaming. ИдСя Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π»Π°ΡΡŒ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ΡŒ создатСлям ΠΈΠ³Ρ€ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ ΠΈΠ³Ρ€Ρ‹ ΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²Ρ‹Π΅ рСсурсы. А ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ взаимодСйствовали Π±Ρ‹ с ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€Π°ΠΌΠΈ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ. Π’ Ρ‚Π°ΠΊΠΎΠΉ Π΄Π΅Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠΉ ΠΌΠ°Π½Π΅Ρ€Π΅ CloudRetro являСтся всСго лишь срСдой для ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ сторонних ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²Ρ‹Ρ… рСсурсов ΠΊ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ Π΅Π³ΠΎ Π±ΠΎΠ»Π΅Π΅ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΌ, ΠΊΠΎΠ³Π΄Π° Π½Π° Π½Π΅ΠΌ большС Π½Π΅ висит хостинг. Роль WebRTC NAT Traversal здСсь ΠΎΡ‡Π΅Π½ΡŒ Π²Π°ΠΆΠ½Π° для облСгчСния ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΎΠ΄Π½ΠΎΡ€Π°Π½Π³ΠΎΠ²ΠΎΠ³ΠΎ соСдинСния Π½Π° сторонних ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²Ρ‹Ρ… рСсурсах, Ρ‡Ρ‚ΠΎ ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ создатСля ΠΊ сСти.

    Π‘ΠΆΠ°Ρ‚ΠΈΠ΅ Π²ΠΈΠ΄Π΅ΠΎ

    Π‘ΠΆΠ°Ρ‚ΠΈΠ΅ Π²ΠΈΠ΄Π΅ΠΎ – это нСзамСнимая Ρ‡Π°ΡΡ‚ΡŒ ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½Π°, которая Π² Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ стСпСни способствуСт плавности ΠΏΠΎΡ‚ΠΎΠΊΠ°. НСсмотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π·Π½Π°Ρ‚ΡŒ всС Π΄Π΅Ρ‚Π°Π»ΠΈ кодирования Π²ΠΈΠ΄Π΅ΠΎ Π² VP8/H264, ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ Ρ€Π°Π·Π±ΠΈΡ€Π°Ρ‚ΡŒΡΡ Π² ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°Ρ… скорости ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²ΠΎΠ³ΠΎ Π²ΠΈΠ΄Π΅ΠΎ, ΠΎΡ‚Π»Π°ΠΆΠΈΠ²Π°Ρ‚ΡŒ Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½ΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΈ Π½Π°ΡΡ‚Ρ€Π°ΠΈΠ²Π°Ρ‚ΡŒ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΡƒ.

    Π‘ΠΆΠ°Ρ‚ΠΈΠ΅ Π²ΠΈΠ΄Π΅ΠΎ для ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²ΠΎΠ³ΠΎ сСрвиса являСтся слоТной Π·Π°Π΄Π°Ρ‡Π΅ΠΉ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΎΠ±Ρ‰Π΅Π΅ врСмя кодирования + врСмя ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° ΠΏΠΎ сСти + врСмя дСкодирования Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΌΠ°Π»ΠΎ, насколько это Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, процСсс кодирования Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ ΠΈ Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½Ρ‹ΠΌ. НСкоторыС Π²Π·Π°ΠΈΠΌΠ½Ρ‹Π΅ уступки ΠΏΡ€ΠΈ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Π½Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΡ‹ – Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΌΡ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Π΅ΡΡ‚ΡŒ Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ врСмя кодирования ΠΌΠ΅Π½ΡŒΡˆΠ΅ΠΌΡƒ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρƒ Ρ„Π°ΠΉΠ»Π° ΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ дСкодирования, ΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ сТатиС.

    ИдСя сТатия Π²ΠΈΠ΄Π΅ΠΎ состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π½Π΅Π½ΡƒΠΆΠ½Ρ‹Π΅ Π±ΠΈΡ‚Ρ‹ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, сохраняя ΠΏΡ€ΠΈ этом допустимый ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ точности для ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ. ΠšΡ€ΠΎΠΌΠ΅ кодирования ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… статичСских ΠΊΠ°Π΄Ρ€ΠΎΠ² изобраТСния, Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Π΄Π΅Π»Π°Π΅Ρ‚ Π²Ρ‹Π²ΠΎΠ΄ для Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ ΠΊΠ°Π΄Ρ€Π° ΠΈΠ· ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ ΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ, поэтому посылаСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΡ… Ρ€Π°Π·Π½ΠΈΡ†Π°. Как Π²ΠΈΠ΄Π½ΠΎ ΠΈΠ· ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° c Pacman’ом, ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄ΠΈΡ„Ρ„Π΅Ρ€Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ Ρ‚ΠΎΡ‡ΠΊΠΈ.

    ΠžΠ±Π»Π°Ρ‡Π½Ρ‹ΠΉ Π³Π΅ΠΉΠΌΠΈΠ½Π³ с ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ исходным ΠΊΠΎΠ΄ΠΎΠΌ Π½Π° WebRTC: p2p, ΠΌΡƒΠ»ΡŒΡ‚ΠΈΠΏΠ»Π΅Π΅Ρ€, zero latency
    Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅ Π²ΠΈΠ΄Π΅ΠΎΠΊΠ°Π΄Ρ€ΠΎΠ² Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Pacman

    Π‘ΠΆΠ°Ρ‚ΠΈΠ΅ Π°ΡƒΠ΄ΠΈΠΎ

    Аналогичным ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ сТатия Π·Π²ΡƒΠΊΠ° опускаСт Π΄Π°Π½Π½Ρ‹Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ восприняты Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠΎΠΌ. Opus Π½Π° Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ являСтся Π°ΡƒΠ΄ΠΈΠΎΠΊΠΎΠ΄Π΅ΠΊΠΎΠΌ с Π½Π°ΠΈΠ»ΡƒΡ‡ΡˆΠ΅ΠΉ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ. Он Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½ для ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π°ΡƒΠ΄ΠΈΠΎΠ²ΠΎΠ»Π½Ρ‹ ΠΏΠΎ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Ρƒ упорядочСнной Π΄Π°Ρ‚Π°Π³Ρ€Π°ΠΌΠΌΡ‹, Ρ‚Π°ΠΊΠΎΠΌΡƒ ΠΊΠ°ΠΊ RTP (Real Time Transport Protocol – ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠ° Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ). Π•Π³ΠΎ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠ° мСньшС, Ρ‡Π΅ΠΌ Ρƒ mp3 ΠΈ aac, Π° качСство Π²Ρ‹ΡˆΠ΅. Π—Π°Π΄Π΅Ρ€ΠΆΠΊΠ° ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ составляСт ΠΎΠΊΠΎΠ»ΠΎ 5~66,5 мс.

    Pion, WebRTC Π² Golang

    Pion – это ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ с ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ исходным ΠΊΠΎΠ΄ΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ пСрСтаскиваСт WebRTC Π½Π° Golang. ВмСсто ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ³ΠΎ Π²Ρ€Π°ΠΏΠΈΠ½Π³Π° Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹Ρ… C++ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ WebRTC, Pion являСтся Π½Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ Golang-Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ WebRTC с Π»ΡƒΡ‡ΡˆΠ΅ΠΉ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ, ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠ΅ΠΉ с Go, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π΅ΠΌ вСрсий Π½Π° ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π°Ρ… WebRTC.

    Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Ρ‚Π°ΠΊΠΆΠ΅ обСспСчиваСт ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²ΡƒΡŽ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Ρƒ Π΄Π°Π½Π½Ρ‹Ρ… с большим количСством ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹Ρ… встроСнных ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ с Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ ΠΌΠ΅Π½Π΅Π΅ сСкунды. Она ΠΈΠΌΠ΅Π΅Ρ‚ свою ΡΠΎΠ±ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ STUN, DTLS, SCTP ΠΈ Ρ‚.Π΄. ΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ экспСримСнты с QUIC ΠΈ WebAssembly. Π‘Π°ΠΌΠ° ΠΏΠΎ сСбС эта опСнсорсная Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° являСтся Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΌ источником обучСния с ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠ΅ΠΉ, Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ сСтСвых ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»ΠΎΠ² ΠΈ классными ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌΠΈ.

    ΠšΠΎΠΌΡŒΡŽΠ½ΠΈΡ‚ΠΈ Pion, возглавляСмоС ΠΎΡ‡Π΅Π½ΡŒ страстным создатСлСм, довольно ΠΎΠΆΠΈΠ²Π»Π΅Π½Π½ΠΎΠ΅, Ρ‚Π°ΠΌ вСдСтся ΠΌΠ½ΠΎΠ³ΠΎ качСствСнных дискуссий ΠΎ WebRTC. Если вас интСрСсуСт эта тСхнология, ΠΏΡ€ΠΈΡΠΎΠ΅Π΄ΠΈΠ½ΡΠΉΡ‚Π΅ΡΡŒ ΠΊ http://pion.ly/slack – Π²Ρ‹ ΡƒΠ·Π½Π°Π΅Ρ‚Π΅ ΠΌΠ½ΠΎΠ³ΠΎ Π½ΠΎΠ²ΠΎΠ³ΠΎ.

    НаписаниС CloudRetro на Golang

    ΠžΠ±Π»Π°Ρ‡Π½Ρ‹ΠΉ Π³Π΅ΠΉΠΌΠΈΠ½Π³ с ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ исходным ΠΊΠΎΠ΄ΠΎΠΌ Π½Π° WebRTC: p2p, ΠΌΡƒΠ»ΡŒΡ‚ΠΈΠΏΠ»Π΅Π΅Ρ€, zero latency
    РСализация Π²ΠΎΡ€ΠΊΠ΅Ρ€Π° Π½Π° Go

    ΠšΠ°Π½Π°Π»Ρ‹ Go Π² дСйствии

    Благодаря красивому Π΄ΠΈΠ·Π°ΠΉΠ½Ρƒ ΠΊΠ°Π½Π°Π»ΠΎΠ² Go, ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²ΠΎΠΉ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ событий ΠΈ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌΠ° Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΠΏΡ€ΠΎΡ‰Π°ΡŽΡ‚ΡΡ. Как ΠΈ Π½Π° Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ΅, Π² Ρ€Π°Π·Π½Ρ‹Ρ… GoRoutines ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ нСсколько ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ². ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ управляСт своим состояниСм ΠΈ общаСтся ΠΏΠΎ ΠΊΠ°Π½Π°Π»Π°ΠΌ. Π’Ρ‹Π±ΠΎΡ€ΠΎΡ‡Π½ΠΎΠ΅ ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠ΅ Golang заставляСт ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ Π°Ρ‚ΠΎΠΌΠ°Ρ€Π½ΠΎΠΌΡƒ ΡΠΎΠ±Ρ‹Ρ‚ΠΈΡŽ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π² ΠΈΠ³Ρ€Π΅ (game tick). Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ для Ρ‚Π°ΠΊΠΎΠ³ΠΎ Π΄ΠΈΠ·Π°ΠΉΠ½Π° Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° Π½Π΅ Π½ΡƒΠΆΠ½Π°. НапримСр, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ сохраняСтся, трСбуСтся ΠΏΠΎΠ»Π½Ρ‹ΠΉ ΡΠ½ΡΠΏΡˆΠΎΡ‚ состояния ΠΈΠ³Ρ€Ρ‹. Π­Ρ‚ΠΎ состояниС Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΎΡΡ‚Π°Π²Π°Ρ‚ΡŒΡΡ Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½Ρ‹ΠΌ, выполняя Π²Ρ…ΠΎΠ΄ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° сохранСниС Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΎ. Π’ΠΎ врСмя ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ game tick’а бэкэнд ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ сохранСния ΠΈΠ»ΠΈ Π²Π²ΠΎΠ΄Π°, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ процСсс потокобСзопасным.

    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

    Π­Ρ‚ΠΎΡ‚ шаблон Golang ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для ΠΌΠΎΠ΅Π³ΠΎ сцСнария использования CrowdPlay ΠΈ Multiple Player. БлСдуя этому ΡˆΠ°Π±Π»ΠΎΠ½Ρƒ, всС ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ Π²Ρ…ΠΎΠ΄Ρ‹ Π² ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠΎΠΌΠ½Π°Ρ‚Π΅ Π²ΡΡ‚Ρ€Π°ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π² Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½Ρ‹ΠΉ Π²Ρ…ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠ°Π½Π°Π». Π˜Π³Ρ€ΠΎΠ²Ρ‹Π΅ ΠΌΠ΅Π΄ΠΈΠ° Π·Π°Ρ‚Π΅ΠΌ Ρ€Π°Π·Π²ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π½Π° всСх ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ Π² ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠΎΠΌΠ½Π°Ρ‚Π΅. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΌΡ‹ достигаСм раздСлСния состояния ΠΈΠ³Ρ€Ρ‹ ΠΌΠ΅ΠΆΠ΄Ρƒ нСсколькими ΠΈΠ³Ρ€ΠΎΠ²Ρ‹ΠΌΠΈ сСссиями Ρ€Π°Π·Π½Ρ‹Ρ… ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ.

    ΠžΠ±Π»Π°Ρ‡Π½Ρ‹ΠΉ Π³Π΅ΠΉΠΌΠΈΠ½Π³ с ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ исходным ΠΊΠΎΠ΄ΠΎΠΌ Π½Π° WebRTC: p2p, ΠΌΡƒΠ»ΡŒΡ‚ΠΈΠΏΠ»Π΅Π΅Ρ€, zero latency
    Бинхронизация ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ сСансами

    НСдостатки Golang

    Golang Π½Π΅ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π΅Π½. Канал ΠΌΠ΅Π΄Π»Π΅Π½Π½Ρ‹ΠΉ. По ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΎΠΉ ΠΊΠ°Π½Π°Π» Go – это просто Π±ΠΎΠ»Π΅Π΅ простой способ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²Ρ‹Ρ… событий, Π½ΠΎ ΠΊΠ°Π½Π°Π» Π½Π΅ Π΄Π°Π΅Ρ‚ Π½Π°ΠΈΠ»ΡƒΡ‡ΡˆΠ΅ΠΉ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. Под ΠΊΠ°Π½Π°Π»ΠΎΠΌ Π΅ΡΡ‚ΡŒ слоТная Π»ΠΎΠ³ΠΈΠΊΠ° Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ я внСс Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ Π² Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ, ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠ² Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΈ Π°Ρ‚ΠΎΠΌΠ°Ρ€Π½Ρ‹Π΅ значСния ΠΏΡ€ΠΈ Π·Π°ΠΌΠ΅Π½Π΅ ΠΊΠ°Π½Π°Π»ΠΎΠ² для ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ.

    ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, garbage collector Π² Golang нСуправляСм, ΠΈΠ·-Π·Π° Ρ‡Π΅Π³ΠΎ ΠΈΠ½ΠΎΠ³Π΄Π° Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‚ ΠΏΠΎΠ΄ΠΎΠ·Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Π΄Π»ΠΈΠ½Π½Ρ‹Π΅ ΠΏΠ°ΡƒΠ·Ρ‹. Π­Ρ‚ΠΎ сильно ΠΌΠ΅ΡˆΠ°Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π΅ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²ΠΎΠ³ΠΎ прилоТСния Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ.

    CGO

    Π’ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π°Ρ VP8/H264 Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Golang с ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ исходным ΠΊΠΎΠ΄ΠΎΠΌ для сТатия ΠΌΠ΅Π΄ΠΈΠ° ΠΈ Libretro для ΠΈΠ³Ρ€ΠΎΠ²Ρ‹Ρ… эмуляторов. ВсС эти Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ просто ΠΎΠ±Π΅Ρ€Ρ‚ΠΊΠ°ΠΌΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ C Π² Go с использованиСм CGO. НСкоторыС ΠΈΠ· нСдостатков пСрСчислСны Π² этом постС Dave Cheney. ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ я столкнулся:

    • Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΠΎΠΉΠΌΠ°Ρ‚ΡŒ ΠΊΡ€Π°Ρˆ Π² CGO, Π΄Π°ΠΆΠ΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Golang RecoveryCrash;
    • Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΡƒΠ·ΠΊΠΎΠ΅ мСсто Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΡ‚ΡŒ Π΄Π΅Ρ‚Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Π² CGO.

    Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

    Π― достиг своСй Ρ†Π΅Π»ΠΈ – разобрался Π² ΠΎΠ±Π»Π°Ρ‡Π½Ρ‹Ρ… ΠΈΠ³Ρ€ΠΎΠ²Ρ‹Ρ… сСрвисах ΠΈ создал ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡƒ, которая ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΠΈΠ³Ρ€Π°Ρ‚ΡŒ Π² Π½ΠΎΡΡ‚Π°Π»ΡŒΠ³ΠΈΡ‡Π΅ΡΠΊΠΈΠ΅ Ρ€Π΅Ρ‚Ρ€ΠΎ-ΠΈΠ³Ρ€Ρ‹ с ΠΌΠΎΠΈΠΌΠΈ Π΄Ρ€ΡƒΠ·ΡŒΡΠΌΠΈ ΠΎΠ½Π»Π°ΠΉΠ½. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ этого ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π±Ρ‹Π»ΠΎ Π±Ρ‹ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΌ Π±Π΅Π· Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Pion ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ сообщСства Pion. Π― Ρ‡Ρ€Π΅Π·Π²Ρ‹Ρ‡Π°ΠΉΠ½ΠΎ Π±Π»Π°Π³ΠΎΠ΄Π°Ρ€Π΅Π½ Π·Π° Π΅Π³ΠΎ интСнсивноС Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΠ΅. ΠŸΡ€ΠΎΡΡ‚Ρ‹Π΅ API, прСдоставлСнныС WebRTC ΠΈ Pion, обСспСчили ΠΏΠ»Π°Π²Π½ΡƒΡŽ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡŽ. МоС ΠΏΠ΅Ρ€Π²ΠΎΠ΅ Π΄ΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒΡΡ‚Π²ΠΎ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ Π±Ρ‹Π»ΠΎ Π²Ρ‹ΠΏΡƒΡ‰Π΅Π½ΠΎ Π½Π° Ρ‚ΠΎΠΉ ΠΆΠ΅ Π½Π΅Π΄Π΅Π»Π΅, нСсмотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ я Π·Π°Ρ€Π°Π½Π΅Π΅ Π½Π΅ Π·Π½Π°Π» ΠΎΠ± ΠΎΠ΄Π½ΠΎΡ€Π°Π½Π³ΠΎΠ²ΠΎΠΉ связи (P2P).

    НСсмотря Π½Π° простоту ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ, P2P-ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²ΠΎΠ΅ Π²Π΅Ρ‰Π°Π½ΠΈΠ΅ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ являСтся ΠΎΡ‡Π΅Π½ΡŒ слоТной ΠΎΠ±Π»Π°ΡΡ‚ΡŒΡŽ Π² ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½ΠΎΠΉ Π½Π°ΡƒΠΊΠ΅. Π•ΠΉ приходится ΠΈΠΌΠ΅Ρ‚ΡŒ Π΄Π΅Π»ΠΎ со ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ ΠΌΠ½ΠΎΠ³ΠΎΠ»Π΅Ρ‚Π½ΠΈΡ… сСтСвых Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ IP ΠΈ NAT для создания ΠΎΠ΄Π½ΠΎΡ€Π°Π½Π³ΠΎΠ²ΠΎΠΉ сСссии. Π—Π° врСмя Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π½Π°Π΄ этим ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠΌ я Π½Π°ΠΊΠΎΠΏΠΈΠ» ΠΌΠ½ΠΎΠ³ΠΎ Ρ†Π΅Π½Π½Ρ‹Ρ… Π·Π½Π°Π½ΠΈΠΉ ΠΎ сСти ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, поэтому Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΡŽ всСм ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ P2P-ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Ρ‹ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ WebRTC.

    CloudRetro обслуТиваСт всС сцСнарии использования, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ я ΠΎΠΆΠΈΠ΄Π°Π», с ΠΌΠΎΠ΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния, ΠΊΠ°ΠΊ Ρ€Π΅Ρ‚Ρ€ΠΎ-Π³Π΅ΠΉΠΌΠ΅Ρ€Π°. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, я Π΄ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ областСй Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ я ΠΌΠΎΠ³Ρƒ ΡƒΠ»ΡƒΡ‡ΡˆΠΈΡ‚ΡŒ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΡΠ΅Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ Π½Π°Π΄Π΅ΠΆΠ½ΠΎΠΉ ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ, ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ высокоС качСство Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ ΠΈΠ³Ρ€, ΠΈΠ»ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π΄Π΅Π»ΠΈΡ‚ΡŒΡΡ ΠΈΠ³Ρ€Π°ΠΌΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌΠΈ. Π― ΡƒΠΏΠΎΡ€Π½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽ Π½Π°Π΄ этим. ΠŸΠΎΠΆΠ°Π»ΡƒΠΉΡΡ‚Π°, слСдитС Π·Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠΌ ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΡ‚Π΅ Π΅Π³ΠΎ, Ссли ΠΎΠ½ Π²Π°ΠΌ нравится.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ