Cheerp, WebRTC рдФрд░ Firebase рдХреЗ рд╕рд╛рде рдорд▓реНрдЯреАрдкреНрд▓реЗрдпрд░ рдЧреЗрдо рдХреЛ C++ рд╕реЗ рд╡реЗрдм рдкрд░ рдкреЛрд░реНрдЯ рдХрд░рдирд╛

рдкрд░рд┐рдЪрдп

рд╣рдорд╛рд░реА рдХрдВрдкрдиреА рдЭреБрдХрд╛рд╡ рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХреА рдкрд╛рд░рдВрдкрд░рд┐рдХ рдбреЗрд╕реНрдХрдЯреЙрдк рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рд╡реЗрдм рдкрд░ рдкреЛрд░реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рдзрд╛рди рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рд╣рдорд╛рд░рд╛ C++ рдХрдВрдкрд╛рдЗрд▓рд░ рдЪрд╣рдХрдирд╛ WebAssembly рдФрд░ JavaScript рдХрд╛ рдПрдХ рд╕рдВрдпреЛрдЬрди рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рджреЛрдиреЛрдВ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рд╕рд░рд▓ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЗрдВрдЯрд░реИрдХреНрд╢рди, рдФрд░ рдЙрдЪреНрдЪ рдкреНрд░рджрд░реНрд╢рдиред

рдЗрд╕рдХреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ, рд╣рдордиреЗ рдПрдХ рдорд▓реНрдЯреАрдкреНрд▓реЗрдпрд░ рдЧреЗрдо рдХреЛ рд╡реЗрдм рдкрд░ рдкреЛрд░реНрдЯ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдФрд░ рдЪреБрдирд╛ Teeworlds. рдЯреАрд╡рд░реНрд▓реНрдбреНрд╕ рдПрдХ рдорд▓реНрдЯреАрдкреНрд▓реЗрдпрд░ 2рдбреА рд░реЗрдЯреНрд░реЛ рдЧреЗрдо рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЦрд┐рд▓рд╛рдбрд╝рд┐рдпреЛрдВ рдХрд╛ рдПрдХ рдЫреЛрдЯрд╛ рд▓реЗрдХрд┐рди рд╕рдХреНрд░рд┐рдп рд╕рдореБрджрд╛рдп рд╣реИ (рдореЗрд░реЗ рд╕рд╣рд┐рдд!)ред рдпрд╣ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдП рдЧрдП рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдФрд░ рд╕реАрдкреАрдпреВ рдФрд░ рдЬреАрдкреАрдпреВ рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рджреЛрдиреЛрдВ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдЫреЛрдЯрд╛ рд╣реИ - рдПрдХ рдЖрджрд░реНрд╢ рдЙрдореНрдореАрджрд╡рд╛рд░ред

Cheerp, WebRTC рдФрд░ Firebase рдХреЗ рд╕рд╛рде рдорд▓реНрдЯреАрдкреНрд▓реЗрдпрд░ рдЧреЗрдо рдХреЛ C++ рд╕реЗ рд╡реЗрдм рдкрд░ рдкреЛрд░реНрдЯ рдХрд░рдирд╛
Teeworlds рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдЪрд▓ рд░рд╣рд╛ рд╣реИ

рд╣рдордиреЗ рдЗрд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд╕рд╛рде рдкреНрд░рдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдХреЛрдб рдХреЛ рд╡реЗрдм рдкрд░ рдкреЛрд░реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рд╕рдорд╛рдзрд╛рди. рдпрд╣ рдЖрдорддреМрд░ рдкрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рддрд░реАрдХреЛрдВ рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

  • XMLHttpRequest/fetch, рдпрджрд┐ рдиреЗрдЯрд╡рд░реНрдХ рднрд╛рдЧ рдореЗрдВ рдХреЗрд╡рд▓ HTTP рдЕрдиреБрд░реЛрдз рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рдпрд╛
  • WebSockets.

рджреЛрдиреЛрдВ рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХреЛ рд╕рд░реНрд╡рд░ рд╕рд╛рдЗрдб рдкрд░ рдПрдХ рд╕рд░реНрд╡рд░ рдШрдЯрдХ рдХреА рдореЗрдЬрдмрд╛рдиреА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдФрд░ рди рд╣реА рдкрд░рд┐рд╡рд╣рди рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдпреВрдбреАрдкреА. рдпрд╣ рд╡реАрдбрд┐рдпреЛ рдХреЙрдиреНрдлреНрд░реЗрдВрд╕рд┐рдВрдЧ рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рдФрд░ рдЧреЗрдо рдЬреИрд╕реЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдкреИрдХреЗрдЯ рдХреА рдбрд┐рд▓реАрд╡рд░реА рдФрд░ рдСрд░реНрдбрд░ рдХреА рдЧрд╛рд░рдВрдЯреА рджреЗрддрд╛ рд╣реИ рдЯреАрд╕реАрдкреА рдХрдо рд╡рд┐рд▓рдВрдмрддрд╛ рдореЗрдВ рдмрд╛рдзрд╛ рдмрди рд╕рдХрддрд╛ рд╣реИред

рддреАрд╕рд░рд╛ рддрд░реАрдХрд╛ рд╣реИ - рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕реЗ рдиреЗрдЯрд╡рд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ: WebRTC.

рдЖрд░рдЯреАрд╕реАрдбрд╛рдЯрд╛рдЪреИрдирд▓ рдпрд╣ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдФрд░ рдЕрд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдЯреНрд░рд╛рдВрд╕рдорд┐рд╢рди рджреЛрдиреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ (рдмрд╛рдж рд╡рд╛рд▓реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдпрд╣ рдЬрдм рднреА рд╕рдВрднрд╡ рд╣реЛ рдпреВрдбреАрдкреА рдХреЛ рдЯреНрд░рд╛рдВрд╕рдкреЛрд░реНрдЯ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реИ), рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд░рд┐рдореЛрдЯ рд╕рд░реНрд╡рд░ рдФрд░ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рджреЛрдиреЛрдВ рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╣рдо рд╕рд░реНрд╡рд░ рдШрдЯрдХ рд╕рд╣рд┐рдд рд╕рдВрдкреВрд░реНрдг рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдкреЛрд░реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ!

рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрд╣ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдХрдард┐рдирд╛рдИ рдХреЗ рд╕рд╛рде рдЖрддрд╛ рд╣реИ: рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рджреЛ WebRTC рд╕рд╣рдХрд░реНрдореА рд╕рдВрд╡рд╛рдж рдХрд░ рд╕рдХреЗрдВ, рдЙрдиреНрд╣реЗрдВ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдЬрдЯрд┐рд▓ рд╣реИрдВрдбрд╢реЗрдХ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдХрдИ рддреГрддреАрдп-рдкрдХреНрд╖ рд╕рдВрд╕реНрдерд╛рдУрдВ (рдПрдХ рд╕рд┐рдЧреНрдирд▓рд┐рдВрдЧ рд╕рд░реНрд╡рд░ рдФрд░ рдПрдХ рдпрд╛ рдЕрдзрд┐рдХ рд╕рд░реНрд╡рд░) рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдЕрдЪреЗрдд/рдореЛрдбрд╝).

рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ, рд╣рдо рдПрдХ рдиреЗрдЯрд╡рд░реНрдХ рдПрдкреАрдЖрдИ рдмрдирд╛рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗ рдЬреЛ рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рд╡реЗрдмрдЖрд░рдЯреАрд╕реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпреВрдбреАрдкреА рд╕реЙрдХреЗрдЯ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЙрддрдирд╛ рдХрд░реАрдм рд╣реИ рдЬрд┐рд╕реЗ рдХрдиреЗрдХреНрд╢рди рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред

рдпрд╣ рд╣рдореЗрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛрдб рдореЗрдВ рдЬрдЯрд┐рд▓ рд╡рд┐рд╡рд░рдгреЛрдВ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд┐рдП рдмрд┐рдирд╛ WebRTC рдХрд╛ рд▓рд╛рдн рдЙрдард╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ (рдЬрд┐рд╕реЗ рд╣рдо рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЙрддрдирд╛ рдХрдо рдмрджрд▓рдирд╛ рдЪрд╛рд╣рддреЗ рдереЗ)ред

рдиреНрдпреВрдирддрдо рд╡реЗрдмрдЖрд░рдЯреАрд╕реА

WebRTC рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдЙрдкрд▓рдмреНрдз рдПрдкреАрдЖрдИ рдХрд╛ рдПрдХ рд╕реЗрдЯ рд╣реИ рдЬреЛ рдСрдбрд┐рдпреЛ, рд╡реАрдбрд┐рдпреЛ рдФрд░ рдордирдорд╛рдиреЗ рдбреЗрдЯрд╛ рдХрд╛ рдкреАрдпрд░-рдЯреВ-рдкреАрдпрд░ рдЯреНрд░рд╛рдВрд╕рдорд┐рд╢рди рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред

ICE рдирд╛рдордХ рддрдВрддреНрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ STUN рдФрд░/рдпрд╛ TURN рд╕рд░реНрд╡рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рд╛рдерд┐рдпреЛрдВ рдХреЗ рдмреАрдЪ рд╕рдВрдмрдВрдз рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рднрд▓реЗ рд╣реА рдПрдХ рдпрд╛ рджреЛрдиреЛрдВ рддрд░рдл NAT рд╣реЛ)ред рд╕рд╛рдереА рдПрд╕рдбреАрдкреА рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рдкреНрд░рд╕реНрддрд╛рд╡ рдФрд░ рдЙрддреНрддрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЖрдИрд╕реАрдИ рдЬрд╛рдирдХрд╛рд░реА рдФрд░ рдЪреИрдирд▓ рдорд╛рдкрджрдВрдбреЛрдВ рдХрд╛ рдЖрджрд╛рди-рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВред

рдмрд╣реБрдд рдЦреВрдм! рдПрдХ рд╕рдордп рдореЗрдВ рдХрд┐рддрдиреЗ рд╕рдВрдХреНрд╖рд┐рдкреНрддрд╛рдХреНрд╖рд░? рдЖрдЗрдП рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдмрддрд╛рдПрдВ рдХрд┐ рдЗрди рд╢рдмреНрджреЛрдВ рдХрд╛ рдХреНрдпрд╛ рдЕрд░реНрде рд╣реИ:

  • NAT рдХреЗ рд▓рд┐рдП рд╕рддреНрд░ рддреНрд░реИрдорд╛рд╕рд┐рдХ рдЙрдкрдпреЛрдЧрд┐рддрд╛рдПрдБ (рдЕрдЪреЗрдд) - NAT рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд░рдиреЗ рдФрд░ рд╣реЛрд╕реНрдЯ рдХреЗ рд╕рд╛рде рд╕реАрдзреЗ рдбреЗрдЯрд╛ рдХреЗ рдЖрджрд╛рди-рдкреНрд░рджрд╛рди рдХреЗ рд▓рд┐рдП рдПрдХ рдЬреЛрдбрд╝реА (рдЖрдИрдкреА, рдкреЛрд░реНрдЯ) рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ред рдпрджрд┐ рд╡рд╣ рдЕрдкрдирд╛ рдХрд╛рд░реНрдп рдкреВрд░рд╛ рдХрд░рдиреЗ рдореЗрдВ рд╕рдлрд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╕рд╣рдХрд░реНрдореА рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рде рдбреЗрдЯрд╛ рдХрд╛ рдЖрджрд╛рди-рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
  • NAT рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рд░рд┐рд▓реЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЯреНрд░реИрд╡рд░реНрд╕рд▓ (рдореЛрдбрд╝) рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ NAT рдЯреНрд░реИрд╡рд░реНрд╕рд▓ рдХреЗ рд▓рд┐рдП рднреА рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рдкреНрд░реЙрдХреНрд╕реА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдбреЗрдЯрд╛ рдЕрдЧреНрд░реЗрд╖рд┐рдд рдХрд░рдХреЗ рдЗрд╕реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬреЛ рджреЛрдиреЛрдВ рд╕рд╛рдерд┐рдпреЛрдВ рдХреЛ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИред рдпрд╣ рд╡рд┐рд▓рдВрдмрддрд╛ рдЬреЛрдбрд╝рддрд╛ рд╣реИ рдФрд░ STUN рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЕрдзрд┐рдХ рдорд╣рдВрдЧрд╛ рд╣реИ (рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдкреВрд░реЗ рд╕рдВрдЪрд╛рд░ рд╕рддреНрд░ рдореЗрдВ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИ), рд▓реЗрдХрд┐рди рдХрднреА-рдХрднреА рдпрд╣ рдПрдХрдорд╛рддреНрд░ рд╡рд┐рдХрд▓реНрдк рд╣реЛрддрд╛ рд╣реИред
  • рдЗрдВрдЯрд░рдПрдХреНрдЯрд┐рд╡ рдХрдиреЗрдХреНрдЯрд┐рд╡рд┐рдЯреА рдкреНрд░рддрд┐рд╖реНрдард╛рди (рдмрд░реНрдл) рд╕реАрдзреЗ рд╕рд╛рдерд┐рдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдХрд┐рд╕реА рднреА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ STUN рдФрд░ TURN рд╕рд░реНрд╡рд░ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рджреЛ рд╕рд╛рдерд┐рдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рд╕рд░реНрд╡реЛрддреНрддрдо рд╕рдВрднрд╡ рд╡рд┐рдзрд┐ рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
  • рд╕рддреНрд░ рд╡рд┐рд╡рд░рдг рдкреНрд░реЛрдЯреЛрдХреЙрд▓ (рдПрд╕рдбреАрдкреА) рдХрдиреЗрдХреНрд╢рди рдЪреИрдирд▓ рдорд╛рдкрджрдВрдбреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рд╛рд░реВрдк рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдИрд╕реАрдИ рдЙрдореНрдореАрджрд╡рд╛рд░, рдорд▓реНрдЯреАрдореАрдбрд┐рдпрд╛ рдХреЛрдбреЗрдХреНрд╕ (рдСрдбрд┐рдпреЛ/рд╡реАрдбрд┐рдпреЛ рдЪреИрдирд▓ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ), рдЖрджрд┐... рд╕рд╛рдерд┐рдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдПрд╕рдбреАрдкреА рдСрдлрд░ рднреЗрдЬрддрд╛ рд╣реИ, рдФрд░ рджреВрд╕рд░рд╛ рдПрд╕рдбреАрдкреА рдЙрддреНрддрд░ рдХреЗ рд╕рд╛рде рдЬрд╡рд╛рдм рджреЗрддрд╛ рд╣реИ . рдЗрд╕рдХреЗ рдмрд╛рдж рдПрдХ рдЪреИрдирд▓ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ.

рдРрд╕рд╛ рдХрдиреЗрдХреНрд╢рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рд╛рдерд┐рдпреЛрдВ рдХреЛ STUN рдФрд░ TURN рд╕рд░реНрд╡рд░ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдЬрд╛рдирдХрд╛рд░реА рдПрдХрддреНрд░ рдХрд░рдиреЗ рдФрд░ рдЗрд╕реЗ рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рде рдЖрджрд╛рди-рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред

рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЙрдирдХреЗ рдкрд╛рд╕ рдЕрднреА рддрдХ рд╕реАрдзреЗ рд╕рдВрдЪрд╛рд░ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕ рдбреЗрдЯрд╛ рдХрд╛ рдЖрджрд╛рди-рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрдЙрдЯ-рдСрдл-рдмреИрдВрдб рддрдВрддреНрд░ рдореМрдЬреВрдж рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП: рдПрдХ рд╕рд┐рдЧреНрдирд▓рд┐рдВрдЧ рд╕рд░реНрд╡рд░ред

рдПрдХ рд╕рд┐рдЧреНрдирд▓рд┐рдВрдЧ рд╕рд░реНрд╡рд░ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХрд╛ рдПрдХрдорд╛рддреНрд░ рдХрд╛рдо рд╣реИрдВрдбрд╢реЗрдХ рдЪрд░рдг рдореЗрдВ рд╕рд╛рдерд┐рдпреЛрдВ рдХреЗ рдмреАрдЪ рдбреЗрдЯрд╛ рдХреЛ рдЕрдЧреНрд░реЗрд╖рд┐рдд рдХрд░рдирд╛ рд╣реИ (рдЬреИрд╕рд╛ рдХрд┐ рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдЪрд┐рддреНрд░ рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ)ред

Cheerp, WebRTC рдФрд░ Firebase рдХреЗ рд╕рд╛рде рдорд▓реНрдЯреАрдкреНрд▓реЗрдпрд░ рдЧреЗрдо рдХреЛ C++ рд╕реЗ рд╡реЗрдм рдкрд░ рдкреЛрд░реНрдЯ рдХрд░рдирд╛
рд╕рд░рд▓реАрдХреГрдд WebRTC рд╣реИрдВрдбрд╢реЗрдХ рдЕрдиреБрдХреНрд░рдо рдЖрд░реЗрдЦ

рдЯреАрд╡рд░реНрд▓реНрдбреНрд╕ рдиреЗрдЯрд╡рд░реНрдХ рдореЙрдбрд▓ рдЕрд╡рд▓реЛрдХрди

рдЯреАрд╡рд░реНрд▓реНрдбреНрд╕ рдиреЗрдЯрд╡рд░реНрдХ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ:

  • рдХреНрд▓рд╛рдЗрдВрдЯ рдФрд░ рд╕рд░реНрд╡рд░ рдШрдЯрдХ рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╣реИрдВред
  • рдЧреНрд░рд╛рд╣рдХ рдХрдИ рд╕рд░реНрд╡рд░реЛрдВ рдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдПрдХ рд╕реЗ рдЬреБрдбрд╝рдХрд░ рдЧреЗрдо рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдПрдХ рд╕рдордп рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдЧреЗрдо рд╣реЛрд╕реНрдЯ рдХрд░рддрд╛ рд╣реИред
  • рдЧреЗрдо рдореЗрдВ рд╕рднреА рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдВрд╕рдлрд░ рд╕рд░реНрд╡рд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
  • рдЧреЗрдо рдХреНрд▓рд╛рдЗрдВрдЯ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╕рднреА рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕рд░реНрд╡рд░реЛрдВ рдХреА рд╕реВрдЪреА рдПрдХрддреНрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢реЗрд╖ рдорд╛рд╕реНрдЯрд░ рд╕рд░реНрд╡рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдбреЗрдЯрд╛ рд╡рд┐рдирд┐рдордп рдХреЗ рд▓рд┐рдП WebRTC рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рд╣рдо рдЧреЗрдо рдХреЗ рд╕рд░реНрд╡рд░ рдШрдЯрдХ рдХреЛ рдЙрд╕ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реНрдерд┐рдд рд╣реИред рдпрд╣ рд╣рдореЗрдВ рдПрдХ рдмрдбрд╝рд╛ рдЕрд╡рд╕рд░ рджреЗрддрд╛ рд╣реИ...

рд╕рд░реНрд╡рд░ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдПрдВ

рд╕рд░реНрд╡рд░ рд▓реЙрдЬрд┐рдХ рдХреА рдХрдореА рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рдлрд╛рдпрджрд╛ рд╣реИ: рд╣рдо рдкреВрд░реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдЬреАрдердм рдкреЗрдЬ рдкрд░ рдпрд╛ рдХреНрд▓рд╛рдЙрдбрдлреНрд▓реЗрдпрд░ рдХреЗ рдкреАрдЫреЗ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдкрд░ рд╕реНрдерд┐рд░ рд╕рд╛рдордЧреНрд░реА рдХреЗ рд░реВрдк рдореЗрдВ рддреИрдирд╛рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕ рдкреНрд░рдХрд╛рд░ рддреЗрдЬреА рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдФрд░ рдореБрдлреНрдд рдореЗрдВ рдЙрдЪреНрдЪ рдЕрдкрдЯрд╛рдЗрдо рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╣рдо рдЙрдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреВрд▓ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдпрджрд┐ рд╣рдо рднрд╛рдЧреНрдпрд╢рд╛рд▓реА рд╣реИрдВ рдФрд░ рдЦреЗрд▓ рд▓реЛрдХрдкреНрд░рд┐рдп рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪреЗ рдХрд╛ рдЖрдзреБрдирд┐рдХреАрдХрд░рдг рдирд╣реАрдВ рдХрд░рдирд╛ рдкрдбрд╝реЗрдЧрд╛ред

рд╣рд╛рд▓рд╛рдБрдХрд┐, рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдЕрднреА рднреА рдПрдХ рдмрд╛рд╣рд░реА рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛:

  • рдПрдХ рдпрд╛ рдЕрдзрд┐рдХ STUN рд╕рд░реНрд╡рд░: рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЪреБрдирдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рдирд┐рдГрд╢реБрд▓реНрдХ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВред
  • рдХрдо рд╕реЗ рдХрдо рдПрдХ рдЯрд░реНрди рд╕рд░реНрд╡рд░: рдпрд╣рд╛рдВ рдХреЛрдИ рдирд┐рдГрд╢реБрд▓реНрдХ рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдпрд╛ рддреЛ рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ рд╕рд░реНрд╡рд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рд╕реЗрд╡рд╛ рдХреЗ рд▓рд┐рдП рднреБрдЧрддрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рдЕрдзрд┐рдХрд╛рдВрд╢ рд╕рдордп рдХрдиреЗрдХреНрд╢рди STUN рд╕рд░реНрд╡рд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдФрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ P2p рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ), рд▓реЗрдХрд┐рди рдлрд╝реЙрд▓рдмреИрдХ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд░реВрдк рдореЗрдВ TURN рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред
  • рд╕рд┐рдЧреНрдирд▓рд┐рдВрдЧ рд╕рд░реНрд╡рд░: рдЕрдиреНрдп рджреЛ рдкрд╣рд▓реБрдУрдВ рдХреЗ рд╡рд┐рдкрд░реАрдд, рд╕рд┐рдЧреНрдирд▓рд┐рдВрдЧ рдорд╛рдирдХреАрдХреГрдд рдирд╣реАрдВ рд╣реИред рд╕рд┐рдЧреНрдирд▓рд┐рдВрдЧ рд╕рд░реНрд╡рд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд┐рд╕рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реЛрдЧрд╛ рдпрд╣ рдХреБрдЫ рд╣рдж рддрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдХрдиреЗрдХреНрд╢рди рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдереЛрдбрд╝реА рдорд╛рддреНрд░рд╛ рдореЗрдВ рдбреЗрдЯрд╛ рдХрд╛ рдЖрджрд╛рди-рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред
  • рдЯреАрд╡рд░реНрд▓реНрдбреНрд╕ рдорд╛рд╕реНрдЯрд░ рд╕рд░реНрд╡рд░: рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдиреНрдп рд╕рд░реНрд╡рд░реЛрдВ рджреНрд╡рд╛рд░рд╛ рдЕрдкрдиреЗ рдЕрд╕реНрддрд┐рддреНрд╡ рдХрд╛ рд╡рд┐рдЬреНрдЮрд╛рдкрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯреНрд╕ рджреНрд╡рд╛рд░рд╛ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕рд░реНрд╡рд░ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ (рдЧреНрд░рд╛рд╣рдХ рд╣рдореЗрд╢рд╛ рдЙрд╕ рд╕рд░реНрд╡рд░ рд╕реЗ рдЬреБрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡реЗ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдЬрд╛рдирддреЗ рд╣реИрдВ), рдРрд╕рд╛ рдХрд░рдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рддрд╛рдХрд┐ рдЦрд┐рд▓рд╛рдбрд╝реА рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд▓реЛрдЧреЛрдВ рдХреЗ рд╕рд╛рде рдЧреЗрдо рдореЗрдВ рднрд╛рдЧ рд▓реЗ рд╕рдХреЗрдВред

рд╣рдордиреЗ Google рдХреЗ рдореБрдлрд╝реНрдд STUN рд╕рд░реНрд╡рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛, рдФрд░ рд╕реНрд╡рдпрдВ рдПрдХ TURN рд╕рд░реНрд╡рд░ рддреИрдирд╛рдд рдХрд┐рдпрд╛ред

рдкрд┐рдЫрд▓реЗ рджреЛ рдмрд┐рдВрджреБрдУрдВ рдХреЗ рд▓рд┐рдП рд╣рдордиреЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ Firebase:

  • рдЯреАрд╡рд░реНрд▓реНрдбреНрд╕ рдорд╛рд╕реНрдЯрд░ рд╕рд░реНрд╡рд░ рдХреЛ рдмрд╣реБрдд рд╕рд░рд▓рддрд╛ рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ: рдкреНрд░рддреНрдпреЗрдХ рд╕рдХреНрд░рд┐рдп рд╕рд░реНрд╡рд░ рдХреА рдЬрд╛рдирдХрд╛рд░реА (рдирд╛рдо, рдЖрдИрдкреА, рдорд╛рдирдЪрд┐рддреНрд░, рдореЛрдб, ...) рд╡рд╛рд▓реА рд╡рд╕реНрддреБрдУрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдХреЗ рд░реВрдк рдореЗрдВред рд╕рд░реНрд╡рд░ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдкреНрд░рдХрд╛рд╢рд┐рдд рдФрд░ рдЕрдкрдбреЗрдЯ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдкреВрд░реА рд╕реВрдЪреА рд▓реЗрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдкреНрд▓реЗрдпрд░ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рд╣рдо рд╕реВрдЪреА рдХреЛ рд╣реЛрдо рдкреЗрдЬ рдкрд░ HTML рдХреЗ рд░реВрдк рдореЗрдВ рднреА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдЦрд┐рд▓рд╛рдбрд╝реА рдЖрд╕рд╛рдиреА рд╕реЗ рд╕рд░реНрд╡рд░ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░ рд╕рдХреЗрдВ рдФрд░ рд╕реАрдзреЗ рдЧреЗрдо рдореЗрдВ рдкрд╣реБрдВрдЪ рд╕рдХреЗрдВред
  • рд╕рд┐рдЧреНрдирд▓рд┐рдВрдЧ рдХрд╛ рд╣рдорд╛рд░реЗ рд╕реЙрдХреЗрдЯ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕реЗ рдЧрд╣рд░рд╛ рд╕рдВрдмрдВрдз рд╣реИ, рдЬрд┐рд╕рдХрд╛ рд╡рд░реНрдгрди рдЕрдЧрд▓реЗ рднрд╛рдЧ рдореЗрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

Cheerp, WebRTC рдФрд░ Firebase рдХреЗ рд╕рд╛рде рдорд▓реНрдЯреАрдкреНрд▓реЗрдпрд░ рдЧреЗрдо рдХреЛ C++ рд╕реЗ рд╡реЗрдм рдкрд░ рдкреЛрд░реНрдЯ рдХрд░рдирд╛
рдЧреЗрдо рдХреЗ рдЕрдВрджрд░ рдФрд░ рд╣реЛрдо рдкреЗрдЬ рдкрд░ рд╕рд░реНрд╡рд░реЛрдВ рдХреА рд╕реВрдЪреА

рд╕реЙрдХреЗрдЯ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди

рд╣рдо рдПрдХ рдПрдкреАрдЖрдИ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬреЛ рдЖрд╡рд╢реНрдпрдХ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЙрддрдирд╛ рдкреЙрдЬрд╝рд┐рдХреНрд╕ рдпреВрдбреАрдкреА рд╕реЙрдХреЗрдЯ рдХреЗ рдХрд░реАрдм рд╣реЛред

рд╣рдо рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рд╕рд░рд▓рддрдо рдбреЗрдЯрд╛ рд╡рд┐рдирд┐рдордп рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдиреНрдпреВрдирддрдо рдХреЛ рднреА рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд░реВрдЯрд┐рдВрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ: рд╕рднреА рд╕рд╣рдХрд░реНрдореА рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдлрд╛рдпрд░рдмреЗрд╕ рдбреЗрдЯрд╛рдмреЗрд╕ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рд╕реЗ рдЬреБрдбрд╝реЗ рд╕рдорд╛рди "рд╡рд░реНрдЪреБрдЕрд▓ LAN" рдкрд░ рд╣реИрдВред

рдЗрд╕рд▓рд┐рдП, рд╣рдореЗрдВ рдЕрджреНрд╡рд┐рддреАрдп рдЖрдИрдкреА рдкрддреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ: рдЕрджреНрд╡рд┐рддреАрдп рдлрд╛рдпрд░рдмреЗрд╕ рдХреБрдВрдЬреА рдорд╛рди (рдбреЛрдореЗрди рдирд╛рдореЛрдВ рдХреЗ рд╕рдорд╛рди) рд╕рд╛рдерд┐рдпреЛрдВ рдХреА рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрд╣рдЪрд╛рди рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИрдВ, рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рд╕рд╣рдХрд░реНрдореА рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреБрдВрдЬреА рдХреЗ рд▓рд┐рдП "рдирдХрд▓реА" рдЖрдИрдкреА рдкрддреЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдпрд╣ рд╡реИрд╢реНрд╡рд┐рдХ рдЖрдИрдкреА рдПрдбреНрд░реЗрд╕ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдорд╛рдкреНрдд рдХрд░ рджреЗрддрд╛ рд╣реИ, рдЬреЛ рдПрдХ рдЧреИрд░-рддреБрдЪреНрдЫ рдХрд╛рд░реНрдп рд╣реИред

рдпрд╣рд╛рдВ рдиреНрдпреВрдирддрдо рдПрдкреАрдЖрдИ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

// Create and destroy a socket
int socket();
int close(int fd);
// Bind a socket to a port, and publish it on Firebase
int bind(int fd, AddrInfo* addr);
// Send a packet. This lazily create a WebRTC connection to the 
// peer when necessary
int sendto(int fd, uint8_t* buf, int len, const AddrInfo* addr);
// Receive the packets destined to this socket
int recvfrom(int fd, uint8_t* buf, int len, AddrInfo* addr);
// Be notified when new packets arrived
int recvCallback(Callback cb);
// Obtain a local ip address for this peer key
uint32_t resolve(client::String* key);
// Get the peer key for this ip
String* reverseResolve(uint32_t addr);
// Get the local peer key
String* local_key();
// Initialize the library with the given Firebase database and 
// WebRTc connection options
void init(client::FirebaseConfig* fb, client::RTCConfiguration* ice);

рдПрдкреАрдЖрдИ рд╕рд░рд▓ рд╣реИ рдФрд░ рдкреЙрдЬрд╝рд┐рдХреНрд╕ рд╕реЙрдХреЗрдЯ рдПрдкреАрдЖрдИ рдХреЗ рд╕рдорд╛рди рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдореЗрдВ рдХреБрдЫ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЕрдВрддрд░ рд╣реИрдВ: рдХреЙрд▓рдмреИрдХ рд▓реЙрдЧ рдХрд░рдирд╛, рд╕реНрдерд╛рдиреАрдп рдЖрдИрдкреА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рдФрд░ рдЖрд▓рд╕реА рдХрдиреЗрдХреНрд╢рди.

рдХреЙрд▓рдмреИрдХ рдкрдВрдЬреАрдХреГрдд рдХрд░рдирд╛

рднрд▓реЗ рд╣реА рдореВрд▓ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдиреЙрди-рдмреНрд▓реЙрдХрд┐рдВрдЧ I/O рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реЛ, рд╡реЗрдм рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХреЛ рджреЛрдмрд╛рд░рд╛ рд░реАрдлреИрдХреНрдЯрд░ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЗрд╕рдХрд╛ рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдЗрд╡реЗрдВрдЯ рд▓реВрдк рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╕реЗ рдЫрд┐рдкрд╛ рд╣реЛрддрд╛ рд╣реИ (рдЪрд╛рд╣реЗ рд╡рд╣ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╣реЛ рдпрд╛ рд╡реЗрдмрдЕрд╕реЗрдВрдмрд▓реА)ред

рдореВрд▓ рдкрд░рд┐рд╡реЗрд╢ рдореЗрдВ рд╣рдо рдЗрд╕ рддрд░рд╣ рдХреЛрдб рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ

while(running) {
  select(...); // wait for I/O events
  while(true) {
    int r = readfrom(...); // try to read
    if (r < 0 && errno == EWOULDBLOCK) // no more data available
      break;
    ...
  }
  ...
}

рдпрджрд┐ рдИрд╡реЗрдВрдЯ рд▓реВрдк рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЫрд┐рдкрд╛ рд╣реБрдЖ рд╣реИ, рддреЛ рд╣рдореЗрдВ рдЗрд╕реЗ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛:

auto cb = []() { // this will be called when new data is available
  while(true) {
    int r = readfrom(...); // try to read
    if (r < 0 && errno == EWOULDBLOCK) // no more data available
      break;
    ...
  }
  ...
};
recvCallback(cb); // register the callback

рд╕реНрдерд╛рдиреАрдп рдЖрдИрдкреА рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ

рд╣рдорд╛рд░реЗ "рдиреЗрдЯрд╡рд░реНрдХ" рдореЗрдВ рдиреЛрдб рдЖрдИрдбреА рдЖрдИрдкреА рдкрддреЗ рдирд╣реАрдВ рд╣реИрдВ, рдмрд▓реНрдХрд┐ рдлрд╛рдпрд░рдмреЗрд╕ рдХреБрдВрдЬреА рд╣реИрдВ (рд╡реЗ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реИрдВ рдЬреЛ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддреА рд╣реИрдВ: -LmEC50PYZLCiCP-vqde ).

рдпрд╣ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╣рдореЗрдВ рдЖрдИрдкреА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдФрд░ рдЙрдирдХреА рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ (рд╕рд╛рде рд╣реА рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рдбрд┐рд╕реНрдХрдиреЗрдХреНрдЯ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдЙрдирдХрд╛ рдирд┐рдкрдЯрд╛рди рдХрд░рдиреЗ) рдХреЗ рд▓рд┐рдП рдПрдХ рддрдВрддреНрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рдорд╛рди рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╕рд╛рдерд┐рдпреЛрдВ рдХреА рдкрд╣рдЪрд╛рди рдХрд░рдирд╛ рдЕрдХреНрд╕рд░ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрддрд╛ рд╣реИред

рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдмрд┐рд▓реНрдХреБрд▓ рдЗрд╕реА рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред resolve ╨╕ reverseResolve: рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд┐рд╕реА рддрд░рд╣ рдХреБрдВрдЬреА рдХрд╛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдорд╛рди рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ (рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдирдкреБрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдпрд╛ рдорд╛рд╕реНрдЯрд░ рд╕рд░реНрд╡рд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ), рдФрд░ рдЗрд╕реЗ рдЖрдВрддрд░рд┐рдХ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдЖрдИрдкреА рдкрддреЗ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдмрд╛рдХреА рдПрдкреАрдЖрдИ рдХреЛ рднреА рд╕рд░рд▓рддрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рдмрдЬрд╛рдп рдпрд╣ рдорд╛рди рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИред

рдпрд╣ DNS рд▓реБрдХрдЕрдк рдХреЗ рд╕рдорд╛рди рд╣реИ, рд▓реЗрдХрд┐рди рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд░ рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдпрд╛рдиреА, рдЖрдИрдкреА рдПрдбреНрд░реЗрд╕ рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХреНрд▓рд╛рдЗрдВрдЯреНрд╕ рдХреЗ рдмреАрдЪ рд╢реЗрдпрд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЕрдЧрд░ рдХрд┐рд╕реА рддрд░рд╣ рдХреЗ рдЧреНрд▓реЛрдмрд▓ рдЖрдЗрдбреЗрдВрдЯрд┐рдлрд╛рдпрд░ рдХреА рдЬрд░реВрд░рдд рд╣реИ рддреЛ рдЙрд╕реЗ рдЕрд▓рдЧ рддрд░реАрдХреЗ рд╕реЗ рдЬреЗрдирд░реЗрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рдЖрд▓рд╕реА рд╕рдВрдмрдВрдз

рдпреВрдбреАрдкреА рдХреЛ рдХрдиреЗрдХреНрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЬреИрд╕рд╛ рдХрд┐ рд╣рдордиреЗ рджреЗрдЦрд╛ рд╣реИ, рд╡реЗрдмрдЖрд░рдЯреАрд╕реА рдХреЛ рджреЛ рд╕рд╛рдерд┐рдпреЛрдВ рдХреЗ рдмреАрдЪ рдбреЗрдЯрд╛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдПрдХ рд▓рдВрдмреА рдХрдиреЗрдХреНрд╢рди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред

рдпрджрд┐ рд╣рдо рдЕрдореВрд░реНрддрддрд╛ рдХрд╛ рд╕рдорд╛рди рд╕реНрддрд░ рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, (sendto/recvfrom рдкреВрд░реНрд╡ рдХрдиреЗрдХреНрд╢рди рдХреЗ рдмрд┐рдирд╛ рдордирдорд╛рдиреЗ рд╕рд╛рдерд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде), рддреЛ рдЙрдиреНрд╣реЗрдВ рдПрдкреАрдЖрдИ рдХреЗ рдЕрдВрджрд░ "рдЖрд▓рд╕реА" (рд╡рд┐рд▓рдВрдмрд┐рдд) рдХрдиреЗрдХреНрд╢рди рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рдпреВрдбреАрдкреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп "рд╕рд░реНрд╡рд░" рдФрд░ "рдХреНрд▓рд╛рдЗрдВрдЯ" рдХреЗ рдмреАрдЪ рд╕рд╛рдорд╛рдиреНрдп рд╕рдВрдЪрд╛рд░ рдХреЗ рджреМрд░рд╛рди рдпрд╣реА рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рд╣рдорд╛рд░реА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдХреНрдпрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП:

  • рд╕рд░реНрд╡рд░ рдХреЙрд▓ bind()рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреЛ рдпрд╣ рдмрддрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рд╡рд╣ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдкреЛрд░реНрдЯ рдкрд░ рдкреИрдХреЗрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИред

рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рд╣рдо рд╕рд░реНрд╡рд░ рдХреБрдВрдЬреА рдХреЗ рддрд╣рдд рдлрд╛рдпрд░рдмреЗрд╕ рдореЗрдВ рдПрдХ рдЦреБрд▓рд╛ рдкреЛрд░реНрдЯ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░реЗрдВрдЧреЗ рдФрд░ рдЗрд╕рдХреЗ рд╕рдмрдЯреНрд░реА рдореЗрдВ рдШрдЯрдирд╛рдУрдВ рдХреЛ рд╕реБрдиреЗрдВрдЧреЗред

  • рд╕рд░реНрд╡рд░ рдХреЙрд▓ recvfrom(), рдЗрд╕ рдкреЛрд░реНрдЯ рдкрд░ рдХрд┐рд╕реА рднреА рд╣реЛрд╕реНрдЯ рд╕реЗ рдЖрдиреЗ рд╡рд╛рд▓реЗ рдкреИрдХреЗрдЯ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдирд╛ред

рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдореЗрдВ рдЗрд╕ рдкреЛрд░реНрдЯ рдкрд░ рднреЗрдЬреЗ рдЧрдП рдкреИрдХреЗрдЯреЛрдВ рдХреА рдЖрдиреЗ рд╡рд╛рд▓реА рдХрддрд╛рд░ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдкреНрд░рддреНрдпреЗрдХ рдкреЛрд░реНрдЯ рдХреА рдЕрдкрдиреА рдХрддрд╛рд░ рд╣реЛрддреА рд╣реИ, рдФрд░ рд╣рдо WebRTC рдбреЗрдЯрд╛рдЧреНрд░рд╛рдо рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рд╕реНрд░реЛрдд рдФрд░ рдЧрдВрддрд╡реНрдп рдкреЛрд░реНрдЯ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рд╣рдо рдЬрд╛рди рд╕рдХреЗрдВ рдХрд┐ рдирдпрд╛ рдкреИрдХреЗрдЯ рдЖрдиреЗ рдкрд░ рдХрд┐рд╕ рдХрддрд╛рд░ рдХреЛ рдЕрдЧреНрд░реЗрд╖рд┐рдд рдХрд░рдирд╛ рд╣реИред

рдХреЙрд▓ рдиреЙрди-рдмреНрд▓реЙрдХрд┐рдВрдЧ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдХреЛрдИ рдкреИрдХреЗрдЯ рдирд╣реАрдВ рд╣реИ, рддреЛ рд╣рдо рдмрд╕ -1 рд▓реМрдЯрд╛рддреЗ рд╣реИрдВ рдФрд░ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ errno=EWOULDBLOCK.

  • рдХреНрд▓рд╛рдЗрдВрдЯ рдХреБрдЫ рдмрд╛рд╣рд░реА рдорд╛рдзреНрдпрдореЛрдВ рд╕реЗ рд╕рд░реНрд╡рд░ рдХрд╛ рдЖрдИрдкреА рдФрд░ рдкреЛрд░реНрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ sendto(). рдпрд╣ рдПрдХ рдЖрдВрддрд░рд┐рдХ рдХреЙрд▓ рднреА рдХрд░рддрд╛ рд╣реИ. bind(), рдЗрд╕рд▓рд┐рдП рдмрд╛рдж рд╡рд╛рд▓рд╛ recvfrom() рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдмрд╛рдЗрдВрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдП рдмрд┐рдирд╛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдЧреАред

рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдХреНрд▓рд╛рдЗрдВрдЯ рдмрд╛рд╣рд░реА рд░реВрдк рд╕реЗ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреБрдВрдЬреА рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ resolve() рдПрдХ рдЖрдИрдкреА рдкрддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП.

рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░, рдпрджрд┐ рджреЛ рд╕рд╣рдХрд░реНрдореА рдЕрднреА рддрдХ рдПрдХ-рджреВрд╕рд░реЗ рд╕реЗ рдЬреБрдбрд╝реЗ рдирд╣реАрдВ рд╣реИрдВ рддреЛ рд╣рдо WebRTC рд╣реИрдВрдбрд╢реЗрдХ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рдПрдХ рд╣реА рд╕рд╣рдХрд░реНрдореА рдХреЗ рд╡рд┐рднрд┐рдиреНрди рдкреЛрд░реНрдЯ рдХреЗ рдХрдиреЗрдХреНрд╢рди рдПрдХ рд╣реА WebRTC DataChannel рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред

рд╣рдо рдЕрдкреНрд░рддреНрдпрдХреНрд╖ рд░реВрдк рд╕реЗ рднреА рдкреНрд░рджрд░реНрд╢рди рдХрд░рддреЗ рд╣реИрдВ bind()рддрд╛рдХрд┐ рд╕рд░реНрд╡рд░ рдЕрдЧрд▓реЗ рдореЗрдВ рдкреБрдирдГ рдХрдиреЗрдХреНрдЯ рд╣реЛ рд╕рдХреЗ sendto() рдпрджрд┐ рдпрд╣ рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рдмрдВрдж рд╣реЛ рдЧрдпрд╛ред

рдЬрдм рдХреНрд▓рд╛рдЗрдВрдЯ рдлрд╛рдпрд░рдмреЗрд╕ рдореЗрдВ рд╕рд░реНрд╡рд░ рдкреЛрд░реНрдЯ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рддрд╣рдд рдЕрдкрдирд╛ рдПрд╕рдбреАрдкреА рдСрдлрд░ рд▓рд┐рдЦрддрд╛ рд╣реИ, рддреЛ рд╕рд░реНрд╡рд░ рдХреЛ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рдХрдиреЗрдХреНрд╢рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реВрдЪрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рд╕рд░реНрд╡рд░ рд╡рд╣рд╛рдВ рдЕрдкрдиреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджреЗрддрд╛ рд╣реИред

рдиреАрдЪреЗ рджрд┐рдпрд╛ рдЧрдпрд╛ рдЪрд┐рддреНрд░ рд╕реЙрдХреЗрдЯ рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рд╕рдВрджреЗрд╢ рдкреНрд░рд╡рд╛рд╣ рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реЗ рд╕рд░реНрд╡рд░ рддрдХ рдкрд╣рд▓реЗ рд╕рдВрджреЗрд╢ рдХреЗ рдкреНрд░рд╕рд╛рд░рдг рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджрд┐рдЦрд╛рддрд╛ рд╣реИ:

Cheerp, WebRTC рдФрд░ Firebase рдХреЗ рд╕рд╛рде рдорд▓реНрдЯреАрдкреНрд▓реЗрдпрд░ рдЧреЗрдо рдХреЛ C++ рд╕реЗ рд╡реЗрдм рдкрд░ рдкреЛрд░реНрдЯ рдХрд░рдирд╛
рдХреНрд▓рд╛рдЗрдВрдЯ рдФрд░ рд╕рд░реНрд╡рд░ рдХреЗ рдмреАрдЪ рдХрдиреЗрдХреНрд╢рди рдЪрд░рдг рдХрд╛ рдкреВрд░рд╛ рдЖрд░реЗрдЦ

рдирд┐рд╖реНрдХрд░реНрд╖

рдпрджрд┐ рдЖрдкрдиреЗ рдЗрд╕реЗ рдЕрдм рддрдХ рдкрдврд╝рд╛ рд╣реИ, рддреЛ рд╕рдВрднрд╡рддрдГ рдЖрдк рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЛ рдХреНрд░рд┐рдпрд╛рдиреНрд╡рд┐рдд рд╣реЛрддреЗ рджреЗрдЦрдиреЗ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реЛрдВрдЧреЗред рдЧреЗрдо рдЦреЗрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ teeworlds.leaningtech.com, рдЗрд╕реЗ рдЕрдЬрдорд╛рдПрдВ!


рд╕рд╣рдХрд░реНрдорд┐рдпреЛрдВ рдХреЗ рдмреАрдЪ рдореИрддреНрд░реАрдкреВрд░реНрдг рдореЗрд▓

рдиреЗрдЯрд╡рд░реНрдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛрдб рдирд┐рдГрд╢реБрд▓реНрдХ рдЙрдкрд▓рдмреНрдз рд╣реИ Github. рд╣рдорд╛рд░реЗ рдЪреИрдирд▓ рдкрд░ рдмрд╛рддрдЪреАрдд рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдВ рдЧреНрд░рд┐рдб!

рд╕реНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╝реЗрдВ