แƒ›แƒ แƒแƒ•แƒแƒšแƒ›แƒแƒ—แƒแƒ›แƒแƒจแƒ˜แƒแƒœแƒ˜ แƒ—แƒแƒ›แƒแƒจแƒ˜แƒก แƒžแƒแƒ แƒขแƒ˜แƒ แƒ”แƒ‘แƒ C++-แƒ“แƒแƒœ แƒ˜แƒœแƒขแƒ”แƒ แƒœแƒ”แƒขแƒจแƒ˜ Cheerp, WebRTC แƒ“แƒ Firebase-แƒ˜แƒ—

แƒจแƒ”แƒกแƒแƒ•แƒแƒšแƒ˜

แƒฉแƒ•แƒ”แƒœแƒ˜ แƒ™แƒแƒ›แƒžแƒแƒœแƒ˜แƒ แƒ“แƒแƒฎแƒ แƒ˜แƒšแƒ˜ แƒขแƒ”แƒฅแƒœแƒแƒšแƒแƒ’แƒ˜แƒ”แƒ‘แƒ˜ แƒ’แƒ—แƒแƒ•แƒแƒ–แƒแƒ‘แƒ— แƒ’แƒแƒ“แƒแƒฌแƒงแƒ•แƒ”แƒขแƒ˜แƒšแƒ”แƒ‘แƒ”แƒ‘แƒก แƒขแƒ แƒแƒ“แƒ˜แƒชแƒ˜แƒฃแƒšแƒ˜ แƒ“แƒ”แƒกแƒ™แƒขแƒแƒžแƒ˜แƒก แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ”แƒ‘แƒ˜แƒก แƒ˜แƒœแƒขแƒ”แƒ แƒœแƒ”แƒขแƒจแƒ˜ แƒžแƒแƒ แƒขแƒ˜แƒ แƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก. แƒฉแƒ•แƒ”แƒœแƒ˜ C++ แƒจแƒ”แƒ›แƒ“แƒ’แƒ”แƒœแƒ”แƒšแƒ˜ แƒ›แƒฎแƒ˜แƒแƒ แƒฃแƒšแƒ”แƒ‘แƒ แƒฅแƒ›แƒœแƒ˜แƒก WebAssembly-แƒ˜แƒกแƒ แƒ“แƒ JavaScript-แƒ˜แƒก แƒ™แƒแƒ›แƒ‘แƒ˜แƒœแƒแƒชแƒ˜แƒแƒก, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒฃแƒ–แƒ แƒฃแƒœแƒ•แƒ”แƒšแƒงแƒแƒคแƒก แƒแƒ แƒ˜แƒ•แƒ”แƒก แƒ›แƒแƒ แƒขแƒ˜แƒ•แƒ˜ แƒ‘แƒ แƒแƒฃแƒ–แƒ”แƒ แƒ˜แƒก แƒฃแƒ แƒ—แƒ˜แƒ”แƒ แƒ—แƒฅแƒ›แƒ”แƒ“แƒ”แƒ‘แƒแƒ“แƒ แƒ›แƒแƒฆแƒแƒšแƒ˜ แƒจแƒ”แƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒ.

แƒ แƒแƒ’แƒแƒ แƒช แƒ›แƒ˜แƒกแƒ˜ แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ˜แƒก แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒ˜, แƒฉแƒ•แƒ”แƒœ แƒ’แƒแƒ“แƒแƒ•แƒฌแƒงแƒ•แƒ˜แƒขแƒ”แƒ— แƒ›แƒฃแƒšแƒขแƒ˜แƒ›แƒแƒ—แƒแƒ›แƒแƒจแƒ˜แƒแƒœแƒ˜ แƒ—แƒแƒ›แƒแƒจแƒ˜แƒก แƒžแƒแƒ แƒขแƒ˜แƒ แƒ”แƒ‘แƒ แƒ˜แƒœแƒขแƒ”แƒ แƒœแƒ”แƒขแƒจแƒ˜ แƒ“แƒ แƒแƒ•แƒ˜แƒ แƒฉแƒ˜แƒ”แƒ— Teeworlds. Teeworlds แƒแƒ แƒ˜แƒก แƒ›แƒฃแƒšแƒขแƒ˜แƒ›แƒแƒ—แƒแƒ›แƒแƒจแƒ˜แƒแƒœแƒ˜ 2D แƒ แƒ”แƒขแƒ แƒ แƒ—แƒแƒ›แƒแƒจแƒ˜ แƒ›แƒแƒ—แƒแƒ›แƒแƒจแƒ”แƒ—แƒ แƒ›แƒชแƒ˜แƒ แƒ”, แƒ›แƒแƒ’แƒ แƒแƒ› แƒแƒฅแƒขแƒ˜แƒฃแƒ แƒ˜ แƒ—แƒ”แƒ›แƒ˜แƒ— (แƒ›แƒแƒ— แƒจแƒแƒ แƒ˜แƒก แƒ›แƒ”!). แƒ˜แƒก แƒ›แƒชแƒ˜แƒ แƒ”แƒ แƒ แƒแƒ’แƒแƒ แƒช แƒ’แƒแƒ“แƒ›แƒแƒฌแƒ”แƒ แƒ˜แƒšแƒ˜ แƒ แƒ”แƒกแƒฃแƒ แƒกแƒ”แƒ‘แƒ˜แƒก, แƒแƒกแƒ”แƒ•แƒ” CPU แƒ“แƒ GPU แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ”แƒ‘แƒ˜แƒก แƒ—แƒ•แƒแƒšแƒกแƒแƒ–แƒ แƒ˜แƒกแƒ˜แƒ— - แƒ˜แƒ“แƒ”แƒแƒšแƒฃแƒ แƒ˜ แƒ™แƒแƒœแƒ“แƒ˜แƒ“แƒแƒขแƒ˜.

แƒ›แƒ แƒแƒ•แƒแƒšแƒ›แƒแƒ—แƒแƒ›แƒแƒจแƒ˜แƒแƒœแƒ˜ แƒ—แƒแƒ›แƒแƒจแƒ˜แƒก แƒžแƒแƒ แƒขแƒ˜แƒ แƒ”แƒ‘แƒ C++-แƒ“แƒแƒœ แƒ˜แƒœแƒขแƒ”แƒ แƒœแƒ”แƒขแƒจแƒ˜ Cheerp, WebRTC แƒ“แƒ Firebase-แƒ˜แƒ—
แƒ›แƒฃแƒจแƒแƒแƒ‘แƒก Teeworlds แƒ‘แƒ แƒแƒฃแƒ–แƒ”แƒ แƒจแƒ˜

แƒฉแƒ•แƒ”แƒœ แƒ’แƒแƒ“แƒแƒ•แƒฌแƒงแƒ•แƒ˜แƒขแƒ”แƒ— แƒ’แƒแƒ›แƒแƒ•แƒ˜แƒงแƒ”แƒœแƒแƒ— แƒ”แƒก แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜ แƒ”แƒฅแƒกแƒžแƒ”แƒ แƒ˜แƒ›แƒ”แƒœแƒขแƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒ–แƒแƒ’แƒแƒ“แƒ˜ แƒ’แƒแƒ“แƒแƒฌแƒงแƒ•แƒ”แƒขแƒ˜แƒšแƒ”แƒ‘แƒ”แƒ‘แƒ˜ แƒฅแƒกแƒ”แƒšแƒ˜แƒก แƒ™แƒแƒ“แƒ˜แƒก แƒ˜แƒœแƒขแƒ”แƒ แƒœแƒ”แƒขแƒจแƒ˜ แƒ’แƒแƒ“แƒแƒขแƒแƒœแƒ˜แƒกแƒ—แƒ•แƒ˜แƒก. แƒ”แƒก แƒฉแƒ•แƒ”แƒฃแƒšแƒ”แƒ‘แƒ แƒ˜แƒ• แƒ™แƒ”แƒ—แƒ“แƒ”แƒ‘แƒ แƒจแƒ”แƒ›แƒ“แƒ”แƒ’แƒ˜ แƒ’แƒ–แƒ”แƒ‘แƒ˜แƒ—:

  • XMLHttpแƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ/แƒ›แƒแƒขแƒแƒœแƒ, แƒ—แƒฃ แƒฅแƒกแƒ”แƒšแƒ˜แƒก แƒœแƒแƒฌแƒ˜แƒšแƒ˜ แƒจแƒ”แƒ“แƒ’แƒ”แƒ‘แƒ แƒ›แƒฎแƒแƒšแƒแƒ“ HTTP แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ”แƒ‘แƒ˜แƒกแƒ’แƒแƒœ, แƒแƒœ
  • แƒ•แƒ”แƒ‘ -แƒกแƒแƒ™แƒ”แƒขแƒ”แƒ‘แƒ˜.

แƒแƒ แƒ˜แƒ•แƒ” แƒ’แƒแƒ“แƒแƒฌแƒงแƒ•แƒ”แƒขแƒ แƒ›แƒแƒ˜แƒ—แƒฎแƒแƒ•แƒก แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ˜แƒก แƒ™แƒแƒ›แƒžแƒแƒœแƒ”แƒœแƒขแƒ˜แƒก แƒฐแƒแƒกแƒขแƒ˜แƒœแƒ’แƒ˜ แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ˜แƒก แƒ›แƒฎแƒแƒ แƒ”แƒก แƒ“แƒ แƒแƒ แƒชแƒ”แƒ แƒ—แƒ˜ แƒแƒ  แƒ˜แƒซแƒšแƒ”แƒ•แƒ แƒกแƒแƒขแƒ แƒแƒœแƒกแƒžแƒแƒ แƒขแƒ แƒžแƒ แƒแƒขแƒแƒ™แƒแƒšแƒแƒ“ แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒแƒก UDP. แƒ”แƒก แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ•แƒแƒœแƒ˜แƒ แƒ แƒ”แƒแƒšแƒฃแƒ  แƒ“แƒ แƒแƒจแƒ˜ แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก, แƒ แƒแƒ’แƒแƒ แƒ˜แƒชแƒแƒ แƒ•แƒ˜แƒ“แƒ”แƒ แƒ™แƒแƒœแƒคแƒ”แƒ แƒ”แƒœแƒชแƒ˜แƒ˜แƒก แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒฃแƒšแƒ˜ แƒฃแƒ–แƒ แƒฃแƒœแƒ•แƒ”แƒšแƒงแƒแƒคแƒ แƒ“แƒ แƒ—แƒแƒ›แƒแƒจแƒ”แƒ‘แƒ˜, แƒ แƒแƒ“แƒ’แƒแƒœ แƒ˜แƒก แƒฃแƒ–แƒ แƒฃแƒœแƒ•แƒ”แƒšแƒงแƒแƒคแƒก แƒžแƒ แƒแƒขแƒแƒ™แƒแƒšแƒ˜แƒก แƒžแƒแƒ™แƒ”แƒขแƒ”แƒ‘แƒ˜แƒก แƒ›แƒ˜แƒฌแƒแƒ“แƒ”แƒ‘แƒแƒก แƒ“แƒ แƒจแƒ”แƒ™แƒ•แƒ”แƒ—แƒแƒก. TCP แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ’แƒแƒฎแƒ“แƒ”แƒก แƒ“แƒแƒ‘แƒแƒšแƒ˜ แƒจแƒ”แƒงแƒแƒ•แƒœแƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒ›แƒแƒคแƒ”แƒ แƒฎแƒ”แƒ‘แƒ”แƒšแƒ˜.

แƒแƒ แƒกแƒ”แƒ‘แƒแƒ‘แƒก แƒ›แƒ”แƒกแƒแƒ›แƒ” แƒ’แƒ–แƒ - แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒ”แƒ— แƒฅแƒกแƒ”แƒšแƒ˜ แƒ‘แƒ แƒแƒฃแƒ–แƒ”แƒ แƒ˜แƒ“แƒแƒœ: WebRTC.

RTCDataChannel แƒ˜แƒ’แƒ˜ แƒ›แƒฎแƒแƒ แƒก แƒฃแƒญแƒ”แƒ แƒก แƒ แƒแƒ’แƒแƒ แƒช แƒกแƒแƒ˜แƒ›แƒ”แƒ“แƒ, แƒแƒกแƒ”แƒ•แƒ” แƒแƒ แƒแƒกแƒแƒœแƒ“แƒ แƒ’แƒแƒ“แƒแƒชแƒ”แƒ›แƒแƒก (แƒแƒ› แƒฃแƒ™แƒแƒœแƒแƒกแƒ™แƒœแƒ”แƒš แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜ แƒ˜แƒก แƒชแƒ“แƒ˜แƒšแƒแƒ‘แƒก แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒแƒก UDP, แƒ แƒแƒ’แƒแƒ แƒช แƒกแƒแƒขแƒ แƒแƒœแƒกแƒžแƒแƒ แƒขแƒ แƒžแƒ แƒแƒขแƒแƒ™แƒแƒšแƒ˜, แƒ แƒแƒ“แƒ”แƒกแƒแƒช แƒ”แƒก แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒ”แƒšแƒ˜แƒ) แƒ“แƒ แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒฃแƒš แƒ˜แƒฅแƒœแƒแƒก แƒ แƒแƒ’แƒแƒ แƒช แƒ“แƒ˜แƒกแƒขแƒแƒœแƒชแƒ˜แƒฃแƒ  แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ—แƒแƒœ, แƒแƒกแƒ”แƒ•แƒ” แƒ‘แƒ แƒแƒฃแƒ–แƒ”แƒ แƒ”แƒ‘แƒก แƒจแƒแƒ แƒ˜แƒก. แƒ”แƒก แƒœแƒ˜แƒจแƒœแƒแƒ•แƒก, แƒ แƒแƒ› แƒฉแƒ•แƒ”แƒœ แƒจแƒ”แƒ’แƒ•แƒ˜แƒซแƒšแƒ˜แƒ แƒ›แƒ—แƒ”แƒšแƒ˜ แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ˜แƒก แƒžแƒแƒ แƒขแƒ˜แƒ แƒ”แƒ‘แƒ แƒ‘แƒ แƒแƒฃแƒ–แƒ”แƒ แƒจแƒ˜, แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ˜แƒก แƒ™แƒแƒ›แƒžแƒแƒœแƒ”แƒœแƒขแƒ˜แƒก แƒฉแƒแƒ—แƒ•แƒšแƒ˜แƒ—!

แƒ—แƒฃแƒ›แƒชแƒ, แƒแƒ›แƒแƒก แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ˜แƒ—แƒ˜ แƒกแƒ˜แƒ แƒ—แƒฃแƒšแƒ” แƒ›แƒแƒฐแƒงแƒ•แƒ”แƒ‘แƒ: แƒกแƒแƒœแƒแƒ› แƒแƒ แƒ˜ WebRTC แƒ—แƒแƒœแƒแƒขแƒแƒšแƒ˜ แƒจแƒ”แƒซแƒšแƒ”แƒ‘แƒก แƒ™แƒแƒ›แƒฃแƒœแƒ˜แƒ™แƒแƒชแƒ˜แƒแƒก, แƒ›แƒแƒ— แƒฃแƒœแƒ“แƒ แƒจแƒ”แƒแƒกแƒ แƒฃแƒšแƒแƒœ แƒจแƒ”แƒ“แƒแƒ แƒ”แƒ‘แƒ˜แƒ— แƒ แƒ—แƒฃแƒšแƒ˜ แƒฎแƒ”แƒšแƒ˜แƒก แƒฉแƒแƒ›แƒแƒ แƒ—แƒ›แƒ”แƒ•แƒ แƒ“แƒแƒกแƒแƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ”แƒ‘แƒšแƒแƒ“, แƒ แƒแƒช แƒ›แƒแƒ˜แƒ—แƒฎแƒแƒ•แƒก แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ˜แƒ›แƒ” แƒ›แƒ”แƒกแƒแƒ›แƒ” แƒ›แƒฎแƒแƒ แƒ˜แƒก แƒ”แƒ แƒ—แƒ”แƒฃแƒšแƒก (แƒกแƒแƒกแƒ˜แƒ’แƒœแƒแƒšแƒ แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒก แƒ“แƒ แƒ”แƒ แƒ— แƒแƒœ แƒ›แƒ”แƒข แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒก. STUN/แฒ›แฒแฒ‘แฒ แฒฃแฒœแฒ”แฒ‘แฒ).

แƒ˜แƒ“แƒ”แƒแƒšแƒฃแƒ  แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜, แƒฉแƒ•แƒ”แƒœ แƒ’แƒ•แƒกแƒฃแƒ แƒก แƒจแƒ”แƒ•แƒฅแƒ›แƒœแƒแƒ— แƒฅแƒกแƒ”แƒšแƒ˜แƒก API, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒก WebRTC-แƒก แƒจแƒ˜แƒ“แƒ, แƒ›แƒแƒ’แƒ แƒแƒ› แƒ แƒแƒช แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒแƒฎแƒšแƒแƒก แƒ˜แƒฅแƒœแƒ”แƒ‘แƒ UDP Sockets แƒ˜แƒœแƒขแƒ”แƒ แƒคแƒ”แƒ˜แƒกแƒ—แƒแƒœ, แƒ แƒแƒ›แƒ”แƒšแƒกแƒแƒช แƒแƒ  แƒกแƒญแƒ˜แƒ แƒ“แƒ”แƒ‘แƒ แƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ˜แƒก แƒ“แƒแƒ›แƒงแƒแƒ แƒ”แƒ‘แƒ.

แƒ”แƒก แƒ›แƒแƒ’แƒ•แƒชแƒ”แƒ›แƒก แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒแƒก แƒ•แƒ˜แƒกแƒแƒ แƒ’แƒ”แƒ‘แƒšแƒแƒ— WebRTCโ€“แƒ˜แƒ— แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ˜แƒก แƒ™แƒแƒ“แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒ แƒ—แƒฃแƒšแƒ˜ แƒ“แƒ”แƒขแƒแƒšแƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ›แƒแƒ•แƒšแƒ”แƒœแƒ˜แƒก แƒ’แƒแƒ แƒ”แƒจแƒ” (แƒ แƒแƒ›แƒšแƒ˜แƒก แƒจแƒ”แƒชแƒ•แƒšแƒแƒช แƒ แƒแƒช แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒœแƒแƒ™แƒšแƒ”แƒ‘แƒแƒ“ แƒ’แƒ•แƒ˜แƒœแƒ“แƒแƒ“แƒ แƒฉแƒ•แƒ”แƒœแƒก แƒžแƒ แƒแƒ”แƒฅแƒขแƒจแƒ˜).

แƒ›แƒ˜แƒœแƒ˜แƒ›แƒแƒšแƒฃแƒ แƒ˜ WebRTC

WebRTC แƒแƒ แƒ˜แƒก API-แƒ”แƒ‘แƒ˜แƒก แƒœแƒแƒ™แƒ แƒ”แƒ‘แƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒฎแƒ”แƒšแƒ›แƒ˜แƒกแƒแƒฌแƒ•แƒ“แƒแƒ›แƒ˜แƒ แƒ‘แƒ แƒแƒฃแƒ–แƒ”แƒ แƒ”แƒ‘แƒจแƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒฃแƒ–แƒ แƒฃแƒœแƒ•แƒ”แƒšแƒงแƒแƒคแƒก แƒแƒฃแƒ“แƒ˜แƒ, แƒ•แƒ˜แƒ“แƒ”แƒ แƒ“แƒ แƒ—แƒ•แƒ˜แƒ—แƒœแƒ”แƒ‘แƒฃแƒ แƒ˜ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜แƒก peer-to-peer แƒ’แƒแƒ“แƒแƒชแƒ”แƒ›แƒแƒก.

แƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ˜ แƒ—แƒแƒœแƒแƒขแƒแƒšแƒ”แƒ‘แƒก แƒจแƒแƒ แƒ˜แƒก แƒ›แƒงแƒแƒ แƒ“แƒ”แƒ‘แƒ (แƒ›แƒแƒจแƒ˜แƒœแƒแƒช แƒ™แƒ˜, แƒ—แƒฃ แƒแƒ แƒกแƒ”แƒ‘แƒแƒ‘แƒก NAT แƒ”แƒ แƒ— แƒแƒœ แƒแƒ แƒ˜แƒ•แƒ” แƒ›แƒฎแƒแƒ แƒ”แƒก) STUN แƒ“แƒ/แƒแƒœ TURN แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ— แƒ›แƒ”แƒฅแƒแƒœแƒ˜แƒ–แƒ›แƒ˜แƒก แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒ˜แƒ—, แƒ แƒแƒ›แƒ”แƒšแƒกแƒแƒช แƒ”แƒฌแƒแƒ“แƒ”แƒ‘แƒ ICE. แƒ—แƒแƒœแƒแƒขแƒแƒšแƒ”แƒ‘แƒ˜ แƒชแƒ•แƒšแƒ˜แƒก ICE แƒ˜แƒœแƒคแƒแƒ แƒ›แƒแƒชแƒ˜แƒแƒก แƒ“แƒ แƒแƒ แƒฎแƒ˜แƒก แƒžแƒแƒ แƒแƒ›แƒ”แƒขแƒ แƒ”แƒ‘แƒก SDP แƒžแƒ แƒแƒขแƒแƒ™แƒแƒšแƒ˜แƒก แƒจแƒ”แƒ—แƒแƒ•แƒแƒ–แƒ”แƒ‘แƒ˜แƒกแƒ แƒ“แƒ แƒžแƒแƒกแƒฃแƒฎแƒ˜แƒก แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒ˜แƒ—.

แฒ•แƒแƒฃ! แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ˜ แƒแƒ‘แƒ แƒ”แƒ•แƒ˜แƒแƒขแƒฃแƒ แƒ แƒ”แƒ แƒ—แƒ“แƒ แƒแƒฃแƒšแƒแƒ“? แƒ›แƒแƒ™แƒšแƒ”แƒ“ แƒแƒ•แƒฎแƒกแƒœแƒแƒ— แƒ แƒแƒก แƒœแƒ˜แƒจแƒœแƒแƒ•แƒก แƒ”แƒก แƒขแƒ”แƒ แƒ›แƒ˜แƒœแƒ”แƒ‘แƒ˜:

  • Session Traversal Utilities for NAT (STUN) โ€” แƒžแƒ แƒแƒขแƒแƒ™แƒแƒšแƒ˜ NAT-แƒ˜แƒก แƒ’แƒ•แƒ”แƒ แƒ“แƒ˜แƒก แƒแƒ•แƒšแƒ˜แƒ— แƒ“แƒ แƒฌแƒงแƒ•แƒ˜แƒšแƒ˜แƒก แƒ›แƒ˜แƒกแƒแƒฆแƒ”แƒ‘แƒแƒ“ (IP, แƒžแƒแƒ แƒขแƒ˜) แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒžแƒ˜แƒ แƒ“แƒแƒžแƒ˜แƒ  แƒฐแƒแƒกแƒขแƒ—แƒแƒœ แƒ’แƒแƒชแƒ•แƒšแƒ˜แƒกแƒ—แƒ•แƒ˜แƒก. แƒ—แƒฃ แƒ˜แƒก แƒ›แƒแƒแƒฎแƒ”แƒ แƒฎแƒ”แƒ‘แƒก แƒ“แƒแƒ•แƒแƒšแƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒแƒก, แƒ›แƒแƒจแƒ˜แƒœ แƒ—แƒแƒœแƒแƒขแƒแƒšแƒ”แƒ‘แƒก แƒจแƒ”แƒฃแƒซแƒšแƒ˜แƒแƒ— แƒ“แƒแƒ›แƒแƒฃแƒ™แƒ˜แƒ“แƒ”แƒ‘แƒšแƒแƒ“ แƒ’แƒแƒชแƒ•แƒแƒšแƒแƒœ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜ แƒ”แƒ แƒ—แƒ›แƒแƒœแƒ”แƒ—แƒ—แƒแƒœ.
  • แƒ’แƒแƒ“แƒแƒ™แƒ•แƒ”แƒ—แƒ แƒ แƒ”แƒšแƒ”แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ— NAT-แƒ˜แƒก แƒ’แƒแƒ แƒจแƒ”แƒ›แƒ (แฒ›แฒแฒ‘แฒ แฒฃแฒœแฒ”แฒ‘แฒ) แƒแƒกแƒ”แƒ•แƒ” แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ NAT แƒ’แƒแƒ“แƒแƒกแƒแƒกแƒ•แƒšแƒ”แƒšแƒแƒ“, แƒ›แƒแƒ’แƒ แƒแƒ› แƒ˜แƒก แƒแƒ›แƒแƒก แƒแƒฎแƒแƒ แƒชแƒ˜แƒ”แƒšแƒ”แƒ‘แƒก แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ“แƒแƒ’แƒ–แƒแƒ•แƒœแƒ แƒžแƒ แƒแƒฅแƒกแƒ˜แƒก แƒ›แƒ”แƒจแƒ•แƒ”แƒแƒ‘แƒ˜แƒ—, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒฎแƒ˜แƒšแƒฃแƒšแƒ˜แƒ แƒแƒ แƒ˜แƒ•แƒ” แƒ—แƒแƒœแƒแƒขแƒแƒšแƒ˜แƒกแƒ—แƒ•แƒ˜แƒก. แƒ˜แƒก แƒแƒ›แƒแƒขแƒ”แƒ‘แƒก แƒจแƒ”แƒงแƒแƒ•แƒœแƒ”แƒ‘แƒแƒก แƒ“แƒ แƒฃแƒคแƒ แƒ แƒซแƒ•แƒ˜แƒ แƒ˜แƒ แƒ’แƒแƒœแƒกแƒแƒฎแƒแƒ แƒชแƒ˜แƒ”แƒšแƒ”แƒ‘แƒšแƒแƒ“, แƒ•แƒ˜แƒ“แƒ แƒ” STUN (แƒ แƒแƒ“แƒ’แƒแƒœ แƒ˜แƒ’แƒ˜ แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ แƒ›แƒ—แƒ”แƒšแƒ˜ แƒกแƒแƒ™แƒแƒ›แƒฃแƒœแƒ˜แƒ™แƒแƒชแƒ˜แƒ แƒกแƒ”แƒกแƒ˜แƒ˜แƒก แƒ’แƒแƒœแƒ›แƒแƒ•แƒšแƒแƒ‘แƒแƒจแƒ˜), แƒ›แƒแƒ’แƒ แƒแƒ› แƒ–แƒแƒ’แƒฏแƒ”แƒ  แƒ”แƒก แƒ”แƒ แƒ—แƒแƒ“แƒ”แƒ แƒ—แƒ˜ แƒ•แƒแƒ แƒ˜แƒแƒœแƒขแƒ˜แƒ.
  • แƒ˜แƒœแƒขแƒ”แƒ แƒแƒฅแƒขแƒ˜แƒฃแƒšแƒ˜ แƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ˜แƒก แƒ“แƒแƒ›แƒงแƒแƒ แƒ”แƒ‘แƒ (ICE) แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ แƒแƒ แƒ˜ แƒ—แƒแƒœแƒแƒขแƒแƒšแƒ˜แƒก แƒ“แƒแƒกแƒแƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ”แƒ‘แƒšแƒแƒ“ แƒกแƒแƒฃแƒ™แƒ”แƒ—แƒ”แƒกแƒ แƒจแƒ”แƒกแƒแƒซแƒšแƒ แƒ›แƒ”แƒ—แƒแƒ“แƒ˜แƒก แƒจแƒ”แƒกแƒแƒ แƒฉแƒ”แƒ•แƒแƒ“, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ”แƒคแƒฃแƒซแƒœแƒ”แƒ‘แƒ แƒฃแƒจแƒฃแƒแƒšแƒแƒ“ แƒ—แƒแƒœแƒแƒขแƒแƒšแƒ”แƒ‘แƒ—แƒแƒœ แƒ“แƒแƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒ“แƒ”แƒ’แƒแƒ“ แƒ›แƒ˜แƒฆแƒ”แƒ‘แƒฃแƒš แƒ˜แƒœแƒคแƒแƒ แƒ›แƒแƒชแƒ˜แƒแƒก, แƒแƒกแƒ”แƒ•แƒ” STUN แƒ“แƒ TURN แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ”แƒ‘แƒ˜แƒก แƒœแƒ”แƒ‘แƒ˜แƒกแƒ›แƒ˜แƒ”แƒ แƒ˜ แƒ แƒแƒแƒ“แƒ”แƒœแƒแƒ‘แƒ˜แƒก แƒ›แƒ˜แƒ”แƒ  แƒ›แƒ˜แƒฆแƒ”แƒ‘แƒฃแƒš แƒ˜แƒœแƒคแƒแƒ แƒ›แƒแƒชแƒ˜แƒแƒก.
  • แƒกแƒ”แƒกแƒ˜แƒ˜แƒก แƒแƒฆแƒฌแƒ”แƒ แƒ˜แƒšแƒแƒ‘แƒ˜แƒก แƒžแƒ แƒแƒขแƒแƒ™แƒแƒšแƒ˜ (SDP) แƒแƒ แƒ˜แƒก แƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ˜แƒก แƒแƒ แƒฎแƒ˜แƒก แƒžแƒแƒ แƒแƒ›แƒ”แƒขแƒ แƒ”แƒ‘แƒ˜แƒก แƒแƒฆแƒฌแƒ”แƒ แƒ˜แƒก แƒคแƒแƒ แƒ›แƒแƒขแƒ˜, แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒแƒ“, ICE แƒ™แƒแƒœแƒ“แƒ˜แƒ“แƒแƒขแƒ”แƒ‘แƒ˜, แƒ›แƒฃแƒšแƒขแƒ˜แƒ›แƒ”แƒ“แƒ˜แƒฃแƒ แƒ˜ แƒ™แƒแƒ“แƒ”แƒ™แƒ”แƒ‘แƒ˜ (แƒแƒฃแƒ“แƒ˜แƒ/แƒ•แƒ˜แƒ“แƒ”แƒ แƒแƒ แƒฎแƒ˜แƒก แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜) แƒ“แƒ แƒ.แƒจ... แƒ”แƒ แƒ—-แƒ”แƒ แƒ—แƒ˜ แƒ—แƒแƒœแƒแƒขแƒแƒšแƒ˜ แƒแƒ’แƒ–แƒแƒ•แƒœแƒ˜แƒก SDP แƒจแƒ”แƒ—แƒแƒ•แƒแƒ–แƒ”แƒ‘แƒแƒก, แƒ›แƒ”แƒแƒ แƒ” แƒ™แƒ˜ แƒžแƒแƒกแƒฃแƒฎแƒแƒ‘แƒก SDP แƒžแƒแƒกแƒฃแƒฎแƒ˜แƒ—. . แƒแƒ›แƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒ˜แƒฅแƒ›แƒœแƒ”แƒ‘แƒ แƒแƒ แƒฎแƒ˜.

แƒแƒกแƒ”แƒ—แƒ˜ แƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ˜แƒก แƒจแƒ”แƒกแƒแƒฅแƒ›แƒœแƒ”แƒšแƒแƒ“, แƒ—แƒแƒœแƒแƒขแƒแƒšแƒ”แƒ‘แƒ›แƒ แƒฃแƒœแƒ“แƒ แƒจแƒ”แƒแƒ’แƒ แƒแƒ•แƒแƒœ แƒ˜แƒœแƒคแƒแƒ แƒ›แƒแƒชแƒ˜แƒ, แƒ แƒแƒ›แƒ”แƒšแƒกแƒแƒช แƒ›แƒ˜แƒ˜แƒฆแƒ”แƒ‘แƒ”แƒœ STUN แƒ“แƒ TURN แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ”แƒ‘แƒ˜แƒ“แƒแƒœ แƒ“แƒ แƒ’แƒแƒชแƒ•แƒแƒšแƒแƒœ แƒ˜แƒกแƒ˜แƒœแƒ˜ แƒ”แƒ แƒ—แƒ›แƒแƒœแƒ”แƒ—แƒ—แƒแƒœ.

แƒžแƒ แƒแƒ‘แƒšแƒ”แƒ›แƒ แƒ˜แƒก แƒแƒ แƒ˜แƒก, แƒ แƒแƒ› แƒ›แƒแƒ— แƒฏแƒ”แƒ  แƒแƒ  แƒแƒฅแƒ•แƒ— แƒžแƒ˜แƒ แƒ“แƒแƒžแƒ˜แƒ แƒ˜ แƒ™แƒแƒ›แƒฃแƒœแƒ˜แƒ™แƒแƒชแƒ˜แƒ˜แƒก แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒšแƒแƒ‘แƒ, แƒแƒ›แƒ˜แƒขแƒแƒ› แƒแƒ› แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒกแƒแƒชแƒ•แƒšแƒ”แƒšแƒแƒ“ แƒฃแƒœแƒ“แƒ แƒแƒ แƒกแƒ”แƒ‘แƒแƒ‘แƒ“แƒ”แƒก แƒ›แƒ”แƒฅแƒแƒœแƒ˜แƒ–แƒ›แƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒแƒ  แƒแƒ แƒ˜แƒก แƒ–แƒแƒšแƒ˜แƒแƒœแƒ˜: แƒกแƒแƒกแƒ˜แƒ’แƒœแƒแƒšแƒ แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ˜.

แƒกแƒแƒกแƒ˜แƒ’แƒœแƒแƒšแƒ แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ˜ แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ˜แƒงแƒแƒก แƒซแƒแƒšแƒ˜แƒแƒœ แƒ›แƒแƒ แƒขแƒ˜แƒ•แƒ˜, แƒ แƒแƒ“แƒ’แƒแƒœ แƒ›แƒ˜แƒกแƒ˜ แƒ”แƒ แƒ—แƒแƒ“แƒ”แƒ แƒ—แƒ˜ แƒแƒ›แƒแƒชแƒแƒœแƒแƒ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒ’แƒแƒ“แƒแƒ’แƒ–แƒแƒ•แƒœแƒ แƒ—แƒแƒœแƒแƒขแƒแƒšแƒ”แƒ‘แƒก แƒจแƒแƒ แƒ˜แƒก แƒฎแƒ”แƒšแƒ˜แƒก แƒฉแƒแƒ›แƒแƒ แƒ—แƒ›แƒ”แƒ•แƒ˜แƒก แƒคแƒแƒ–แƒแƒจแƒ˜ (แƒ แƒแƒ’แƒแƒ แƒช แƒœแƒแƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒ˜แƒ แƒฅแƒ•แƒ”แƒ›แƒแƒ— แƒ›แƒแƒชแƒ”แƒ›แƒฃแƒš แƒ“แƒ˜แƒแƒ’แƒ แƒแƒ›แƒแƒจแƒ˜).

แƒ›แƒ แƒแƒ•แƒแƒšแƒ›แƒแƒ—แƒแƒ›แƒแƒจแƒ˜แƒแƒœแƒ˜ แƒ—แƒแƒ›แƒแƒจแƒ˜แƒก แƒžแƒแƒ แƒขแƒ˜แƒ แƒ”แƒ‘แƒ C++-แƒ“แƒแƒœ แƒ˜แƒœแƒขแƒ”แƒ แƒœแƒ”แƒขแƒจแƒ˜ Cheerp, WebRTC แƒ“แƒ Firebase-แƒ˜แƒ—
แƒ’แƒแƒ›แƒแƒ แƒขแƒ˜แƒ•แƒ”แƒ‘แƒฃแƒšแƒ˜ WebRTC แƒฎแƒ”แƒšแƒ˜แƒก แƒฉแƒแƒ›แƒแƒ แƒ—แƒ›แƒ”แƒ•แƒ˜แƒก แƒ›แƒ˜แƒ›แƒ“แƒ”แƒ•แƒ แƒแƒ‘แƒ˜แƒก แƒ“แƒ˜แƒแƒ’แƒ แƒแƒ›แƒ

Teeworlds แƒฅแƒกแƒ”แƒšแƒ˜แƒก แƒ›แƒแƒ“แƒ”แƒšแƒ˜แƒก แƒ›แƒ˜แƒ›แƒแƒฎแƒ˜แƒšแƒ•แƒ

Teeworlds แƒฅแƒกแƒ”แƒšแƒ˜แƒก แƒแƒ แƒฅแƒ˜แƒขแƒ”แƒฅแƒขแƒฃแƒ แƒ แƒซแƒแƒšแƒ˜แƒแƒœ แƒ›แƒแƒ แƒขแƒ˜แƒ•แƒ˜แƒ:

  • แƒ™แƒšแƒ˜แƒ”แƒœแƒขแƒ˜ แƒ“แƒ แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ˜แƒก แƒ™แƒแƒ›แƒžแƒแƒœแƒ”แƒœแƒขแƒ”แƒ‘แƒ˜ แƒแƒ แƒ˜ แƒ’แƒแƒœแƒกแƒฎแƒ•แƒแƒ•แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒแƒ.
  • แƒ™แƒšแƒ˜แƒ”แƒœแƒขแƒ”แƒ‘แƒ˜ แƒจแƒ”แƒ“แƒ˜แƒแƒœ แƒ—แƒแƒ›แƒแƒจแƒจแƒ˜ แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ˜แƒ›แƒ” แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ˜แƒ“แƒแƒœ แƒ”แƒ แƒ—-แƒ”แƒ แƒ—แƒ—แƒแƒœ แƒ“แƒแƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ”แƒ‘แƒ˜แƒ—, แƒ แƒแƒ›แƒ”แƒšแƒ—แƒแƒ’แƒแƒœ แƒ—แƒ˜แƒ—แƒแƒ”แƒฃแƒšแƒ˜ แƒ›แƒแƒกแƒžแƒ˜แƒœแƒซแƒšแƒแƒ‘แƒก แƒ›แƒฎแƒแƒšแƒแƒ“ แƒ”แƒ แƒ— แƒ—แƒแƒ›แƒแƒจแƒก แƒ”แƒ แƒ—แƒ“แƒ แƒแƒฃแƒšแƒแƒ“.
  • แƒ—แƒแƒ›แƒแƒจแƒจแƒ˜ แƒงแƒ•แƒ”แƒšแƒ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒ’แƒแƒ“แƒแƒชแƒ”แƒ›แƒ แƒฎแƒ“แƒ”แƒ‘แƒ แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ˜แƒก แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒ˜แƒ—.
  • แƒกแƒžแƒ”แƒชแƒ˜แƒแƒšแƒฃแƒ แƒ˜ แƒกแƒแƒ›แƒแƒ’แƒ˜แƒกแƒขแƒ แƒ แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ˜ แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ แƒงแƒ•แƒ”แƒšแƒ แƒกแƒแƒฏแƒแƒ แƒ แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ˜แƒก แƒกแƒ˜แƒ˜แƒก แƒจแƒ”แƒกแƒแƒ’แƒ แƒแƒ•แƒ”แƒ‘แƒšแƒแƒ“, แƒ แƒแƒ›แƒšแƒ”แƒ‘แƒ˜แƒช แƒœแƒแƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒ˜แƒ แƒ—แƒแƒ›แƒแƒจแƒ˜แƒก แƒ™แƒšแƒ˜แƒ”แƒœแƒขแƒจแƒ˜.

แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒ’แƒแƒชแƒ•แƒšแƒ˜แƒกแƒ—แƒ•แƒ˜แƒก WebRTC-แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒก แƒฌแƒงแƒแƒšแƒแƒ‘แƒ˜แƒ—, แƒฉแƒ•แƒ”แƒœ แƒจแƒ”แƒ’แƒ•แƒ˜แƒซแƒšแƒ˜แƒ แƒ’แƒแƒ“แƒแƒ•แƒ˜แƒขแƒแƒœแƒแƒ— แƒ—แƒแƒ›แƒแƒจแƒ˜แƒก แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ˜แƒก แƒ™แƒแƒ›แƒžแƒแƒœแƒ”แƒœแƒขแƒ˜ แƒ‘แƒ แƒแƒฃแƒ–แƒ”แƒ แƒจแƒ˜, แƒกแƒแƒ“แƒแƒช แƒ™แƒšแƒ˜แƒ”แƒœแƒขแƒ˜ แƒ›แƒ“แƒ”แƒ‘แƒแƒ แƒ”แƒแƒ‘แƒก. แƒ”แƒก แƒ“แƒ˜แƒ“ แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒšแƒแƒ‘แƒแƒก แƒ’แƒ•แƒแƒซแƒšแƒ”แƒ•แƒก...

แƒ›แƒแƒ˜แƒจแƒแƒ แƒ”แƒ— แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ”แƒ‘แƒ˜

แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ˜แƒก แƒšแƒแƒ’แƒ˜แƒ™แƒ˜แƒก แƒœแƒแƒ™แƒšแƒ”แƒ‘แƒแƒ‘แƒแƒก แƒแƒฅแƒ•แƒก แƒ™แƒแƒ แƒ’แƒ˜ แƒฃแƒžแƒ˜แƒ แƒแƒขแƒ”แƒกแƒแƒ‘แƒ: แƒฉแƒ•แƒ”แƒœ แƒจแƒ”แƒ’แƒ•แƒ˜แƒซแƒšแƒ˜แƒ แƒ’แƒแƒœแƒ•แƒแƒ—แƒแƒ•แƒกแƒแƒ— แƒ›แƒ—แƒ”แƒšแƒ˜ แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ แƒกแƒขแƒแƒขแƒ˜แƒ™แƒฃแƒ แƒ˜ แƒจแƒ˜แƒœแƒแƒแƒ แƒกแƒ˜แƒก แƒกแƒแƒฎแƒ˜แƒ— Github แƒ’แƒ•แƒ”แƒ แƒ“แƒ”แƒ‘แƒ–แƒ” แƒแƒœ แƒฉแƒ•แƒ”แƒœแƒก แƒกแƒแƒ™แƒฃแƒ—แƒแƒ  แƒแƒžแƒแƒ แƒแƒขแƒฃแƒ แƒแƒ–แƒ” Cloudflare-แƒ˜แƒก แƒฃแƒ™แƒแƒœ, แƒ แƒ˜แƒ—แƒแƒช แƒฃแƒ–แƒ แƒฃแƒœแƒ•แƒ”แƒšแƒ•แƒงแƒแƒคแƒ— แƒกแƒฌแƒ แƒแƒค แƒฉแƒแƒ›แƒแƒขแƒ•แƒ˜แƒ แƒ—แƒ•แƒ”แƒ‘แƒก แƒ“แƒ แƒ›แƒแƒฆแƒแƒš แƒ“แƒ แƒแƒจแƒ˜ แƒฃแƒคแƒแƒกแƒแƒ“. แƒคแƒแƒฅแƒขแƒแƒ‘แƒ แƒ˜แƒ•แƒแƒ“, แƒจแƒ”แƒ’แƒ•แƒ˜แƒซแƒšแƒ˜แƒ แƒ“แƒแƒ•แƒ˜แƒ•แƒ˜แƒฌแƒงแƒแƒ— แƒ˜แƒกแƒ˜แƒœแƒ˜ แƒ“แƒ แƒ—แƒฃ แƒ’แƒแƒ’แƒ•แƒ˜แƒ›แƒแƒ แƒ—แƒšแƒ แƒ“แƒ แƒ—แƒแƒ›แƒแƒจแƒ˜ แƒžแƒแƒžแƒฃแƒšแƒแƒ แƒฃแƒšแƒ˜ แƒ’แƒแƒฎแƒ“แƒ”แƒ‘แƒ, แƒ›แƒแƒจแƒ˜แƒœ แƒ˜แƒœแƒคแƒ แƒแƒกแƒขแƒ แƒฃแƒฅแƒขแƒฃแƒ แƒ˜แƒก แƒ›แƒแƒ“แƒ”แƒ แƒœแƒ˜แƒ–แƒแƒชแƒ˜แƒ แƒแƒ  แƒ˜แƒฅแƒœแƒ”แƒ‘แƒ แƒกแƒแƒญแƒ˜แƒ แƒ.

แƒ—แƒฃแƒ›แƒชแƒ, แƒ˜แƒ›แƒ˜แƒกแƒแƒ—แƒ•แƒ˜แƒก, แƒ แƒแƒ› แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒ แƒ˜แƒ›แƒฃแƒจแƒแƒแƒก, แƒฉแƒ•แƒ”แƒœ แƒ™แƒ•แƒšแƒแƒ• แƒฃแƒœแƒ“แƒ แƒ’แƒแƒ›แƒแƒ•แƒ˜แƒงแƒ”แƒœแƒแƒ— แƒ’แƒแƒ แƒ” แƒแƒ แƒฅแƒ˜แƒขแƒ”แƒฅแƒขแƒฃแƒ แƒ:

  • แƒ”แƒ แƒ—แƒ˜ แƒแƒœ แƒ›แƒ”แƒขแƒ˜ STUN แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ˜: แƒฉแƒ•แƒ”แƒœ แƒ’แƒ•แƒแƒฅแƒ•แƒก แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ˜แƒ›แƒ” แƒฃแƒคแƒแƒกแƒ แƒแƒ แƒฉแƒ”แƒ•แƒแƒœแƒ˜.
  • แƒ›แƒ˜แƒœแƒ˜แƒ›แƒฃแƒ› แƒ”แƒ แƒ—แƒ˜ TURN แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ˜: แƒแƒฅ แƒแƒ  แƒแƒ แƒ˜แƒก แƒฃแƒคแƒแƒกแƒ แƒ•แƒแƒ แƒ˜แƒแƒœแƒขแƒ”แƒ‘แƒ˜, แƒแƒกแƒ” แƒ แƒแƒ› แƒฉแƒ•แƒ”แƒœ แƒจแƒ”แƒ’แƒ•แƒ˜แƒซแƒšแƒ˜แƒ แƒ“แƒแƒ•แƒแƒงแƒ”แƒœแƒแƒ— แƒกแƒแƒ™แƒฃแƒ—แƒแƒ แƒ˜ แƒแƒœ แƒ’แƒแƒ“แƒแƒ•แƒ˜แƒฎแƒแƒ“แƒแƒ— แƒกแƒ”แƒ แƒ•แƒ˜แƒกแƒ˜. แƒกแƒแƒ‘แƒ”แƒ“แƒœแƒ˜แƒ”แƒ แƒแƒ“, แƒฃแƒ›แƒ”แƒขแƒ”แƒก แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜, แƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ˜ แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ“แƒแƒ›แƒงแƒแƒ แƒ“แƒ”แƒก STUN แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ”แƒ‘แƒ˜แƒก แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒ˜แƒ— (แƒ“แƒ แƒฃแƒ–แƒ แƒฃแƒœแƒ•แƒ”แƒšแƒงแƒแƒก แƒœแƒแƒ›แƒ“แƒ•แƒ˜แƒšแƒ˜ p2p), แƒ›แƒแƒ’แƒ แƒแƒ› TURN แƒกแƒแƒญแƒ˜แƒ แƒแƒ แƒ แƒแƒ’แƒแƒ แƒช แƒ“แƒแƒ›แƒฎแƒ›แƒแƒ แƒ” แƒ•แƒแƒ แƒ˜แƒแƒœแƒขแƒ˜.
  • แƒกแƒ˜แƒ’แƒœแƒแƒšแƒ˜แƒ–แƒแƒชแƒ˜แƒ˜แƒก แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ˜: แƒ“แƒแƒœแƒแƒ แƒฉแƒ”แƒœแƒ˜ แƒแƒ แƒ˜ แƒแƒกแƒžแƒ”แƒฅแƒขแƒ˜แƒกแƒ’แƒแƒœ แƒ’แƒแƒœแƒกแƒฎแƒ•แƒแƒ•แƒ”แƒ‘แƒ˜แƒ—, แƒกแƒ˜แƒ’แƒœแƒแƒšแƒ˜แƒ–แƒแƒชแƒ˜แƒ แƒแƒ  แƒแƒ แƒ˜แƒก แƒกแƒขแƒแƒœแƒ“แƒแƒ แƒขแƒ˜แƒ–แƒ”แƒ‘แƒฃแƒšแƒ˜. แƒ แƒแƒ–แƒ” แƒ˜แƒฅแƒœแƒ”แƒ‘แƒ แƒ แƒ”แƒแƒšแƒฃแƒ แƒแƒ“ แƒžแƒแƒกแƒฃแƒฎแƒ˜แƒกแƒ›แƒ’แƒ”แƒ‘แƒ”แƒšแƒ˜ แƒกแƒแƒกแƒ˜แƒ’แƒœแƒแƒšแƒ แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ˜, แƒ’แƒแƒ แƒ™แƒ•แƒ”แƒฃแƒšแƒฌแƒ˜แƒšแƒแƒ“ แƒ“แƒแƒ›แƒแƒ™แƒ˜แƒ“แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒแƒ–แƒ”. แƒฉแƒ•แƒ”แƒœแƒก แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜, แƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ˜แƒก แƒ“แƒแƒ›แƒงแƒแƒ แƒ”แƒ‘แƒแƒ›แƒ“แƒ” แƒแƒฃแƒชแƒ˜แƒšแƒ”แƒ‘แƒ”แƒšแƒ˜แƒ แƒ›แƒชแƒ˜แƒ แƒ” แƒ แƒแƒแƒ“แƒ”แƒœแƒแƒ‘แƒ˜แƒก แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒชแƒ•แƒšแƒ.
  • Teeworlds Master Server: แƒ›แƒแƒก แƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ”แƒœ แƒกแƒฎแƒ•แƒ แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ”แƒ‘แƒ˜ แƒ—แƒแƒ•แƒ˜แƒแƒœแƒ—แƒ˜ แƒแƒ แƒกแƒ”แƒ‘แƒแƒ‘แƒ˜แƒก แƒ แƒ”แƒ™แƒšแƒแƒ›แƒ˜แƒ แƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒ“แƒ แƒ™แƒšแƒ˜แƒ”แƒœแƒขแƒ”แƒ‘แƒ˜แƒก แƒ›แƒ˜แƒ”แƒ  แƒกแƒแƒฏแƒแƒ แƒ แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ”แƒ‘แƒ˜แƒก แƒ›แƒแƒกแƒแƒซแƒ”แƒ‘แƒœแƒแƒ“. แƒ›แƒ˜แƒฃแƒฎแƒ”แƒ“แƒแƒ•แƒแƒ“ แƒ˜แƒ›แƒ˜แƒกแƒ, แƒ แƒแƒ› แƒ”แƒก แƒแƒ  แƒแƒ แƒ˜แƒก แƒกแƒแƒญแƒ˜แƒ แƒ (แƒ™แƒšแƒ˜แƒ”แƒœแƒขแƒ”แƒ‘แƒก แƒงแƒแƒ•แƒ”แƒšแƒ—แƒ•แƒ˜แƒก แƒจแƒ”แƒฃแƒซแƒšแƒ˜แƒแƒ— แƒฎแƒ”แƒšแƒ˜แƒ— แƒ“แƒแƒฃแƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ“แƒœแƒ”แƒœ แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒก, แƒ แƒแƒ›แƒšแƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘แƒแƒช แƒ˜แƒชแƒ˜แƒแƒœ), แƒ™แƒแƒ แƒ’แƒ˜ แƒ˜แƒฅแƒœแƒ”แƒ‘แƒ, แƒ แƒแƒ› แƒ›แƒแƒ—แƒแƒ›แƒแƒจแƒ”แƒ”แƒ‘แƒก แƒจแƒ”แƒ”แƒซแƒšแƒแƒ— แƒ›แƒแƒœแƒแƒฌแƒ˜แƒšแƒ”แƒแƒ‘แƒ แƒ›แƒ˜แƒ˜แƒฆแƒแƒœ แƒ—แƒแƒ›แƒแƒจแƒ”แƒ‘แƒจแƒ˜ แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒ˜แƒ— แƒแƒ“แƒแƒ›แƒ˜แƒแƒœแƒ”แƒ‘แƒ—แƒแƒœ.

แƒฉแƒ•แƒ”แƒœ แƒ’แƒแƒ“แƒแƒ•แƒฌแƒงแƒ•แƒ˜แƒขแƒ”แƒ— แƒ’แƒแƒ›แƒแƒ’แƒ•แƒ”แƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒœแƒ Google-แƒ˜แƒก แƒฃแƒคแƒแƒกแƒ STUN แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ”แƒ‘แƒ˜ แƒ“แƒ แƒ—แƒแƒ•แƒแƒ“ แƒ’แƒแƒœแƒ•แƒแƒ—แƒแƒ•แƒกแƒ”แƒ— แƒ”แƒ แƒ—แƒ˜ TURN แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ˜.

แƒ‘แƒแƒšแƒ แƒแƒ แƒ˜ แƒžแƒฃแƒœแƒฅแƒขแƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒฉแƒ•แƒ”แƒœ แƒ’แƒแƒ›แƒแƒ•แƒ˜แƒงแƒ”แƒœแƒ”แƒ— Firebase:

  • Teeworlds แƒกแƒแƒ›แƒแƒ’แƒ˜แƒกแƒขแƒ แƒ แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ˜ แƒ“แƒแƒœแƒ”แƒ แƒ’แƒ˜แƒšแƒ˜แƒ แƒซแƒแƒšแƒ˜แƒแƒœ แƒ›แƒแƒ แƒขแƒ˜แƒ•แƒแƒ“: แƒ แƒแƒ’แƒแƒ แƒช แƒแƒ‘แƒ˜แƒ”แƒฅแƒขแƒ”แƒ‘แƒ˜แƒก แƒกแƒ˜แƒ, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒจแƒ”แƒ˜แƒชแƒแƒ•แƒก แƒ˜แƒœแƒคแƒแƒ แƒ›แƒแƒชแƒ˜แƒแƒก (แƒกแƒแƒฎแƒ”แƒšแƒ˜, IP, แƒ แƒฃแƒ™แƒ, แƒ แƒ”แƒŸแƒ˜แƒ›แƒ˜, ...) แƒ—แƒ˜แƒ—แƒแƒ”แƒฃแƒšแƒ˜ แƒแƒฅแƒขแƒ˜แƒฃแƒ แƒ˜ แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘. แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ”แƒ‘แƒ˜ แƒแƒฅแƒ•แƒ”แƒงแƒœแƒ”แƒ‘แƒ”แƒœ แƒ“แƒ แƒ’แƒแƒœแƒแƒแƒฎแƒšแƒ”แƒ‘แƒก แƒกแƒแƒ™แƒฃแƒ—แƒแƒ  แƒแƒ‘แƒ˜แƒ”แƒฅแƒขแƒก, แƒ™แƒšแƒ˜แƒ”แƒœแƒขแƒ”แƒ‘แƒ˜ แƒ™แƒ˜ แƒ˜แƒฆแƒ”แƒ‘แƒ”แƒœ แƒ›แƒ—แƒ”แƒš แƒกแƒ˜แƒแƒก แƒ“แƒ แƒแƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒ”แƒœ แƒ›แƒแƒก แƒ›แƒแƒ—แƒแƒ›แƒแƒจแƒ”แƒก. แƒฉแƒ•แƒ”แƒœ แƒแƒกแƒ”แƒ•แƒ” แƒ•แƒแƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒ— แƒกแƒ˜แƒแƒก แƒ›แƒ—แƒแƒ•แƒแƒ  แƒ’แƒ•แƒ”แƒ แƒ“แƒ–แƒ”, แƒ แƒแƒ’แƒแƒ แƒช HTML, แƒ แƒแƒ—แƒ แƒ›แƒแƒ—แƒแƒ›แƒแƒจแƒ”แƒ”แƒ‘แƒ›แƒ แƒฃแƒ‘แƒ แƒแƒšแƒแƒ“ แƒ“แƒแƒแƒฌแƒ™แƒแƒžแƒฃแƒœแƒแƒœ แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ–แƒ” แƒ“แƒ แƒžแƒ˜แƒ แƒ“แƒแƒžแƒ˜แƒ  แƒ—แƒแƒ›แƒแƒจแƒจแƒ˜ แƒ’แƒแƒ“แƒแƒ˜แƒงแƒ•แƒแƒœแƒแƒœ.
  • แƒกแƒ˜แƒ’แƒœแƒแƒšแƒ˜แƒ–แƒแƒชแƒ˜แƒ แƒ›แƒญแƒ˜แƒ“แƒ แƒแƒ“ แƒแƒ แƒ˜แƒก แƒ“แƒแƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒฉแƒ•แƒ”แƒœแƒก แƒกแƒแƒ™แƒ”แƒขแƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒœแƒฎแƒแƒ แƒชแƒ˜แƒ”แƒšแƒ”แƒ‘แƒแƒกแƒ—แƒแƒœ, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒแƒฆแƒฌแƒ”แƒ แƒ˜แƒšแƒ˜แƒ แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒœแƒแƒฌแƒ˜แƒšแƒจแƒ˜.

แƒ›แƒ แƒแƒ•แƒแƒšแƒ›แƒแƒ—แƒแƒ›แƒแƒจแƒ˜แƒแƒœแƒ˜ แƒ—แƒแƒ›แƒแƒจแƒ˜แƒก แƒžแƒแƒ แƒขแƒ˜แƒ แƒ”แƒ‘แƒ C++-แƒ“แƒแƒœ แƒ˜แƒœแƒขแƒ”แƒ แƒœแƒ”แƒขแƒจแƒ˜ Cheerp, WebRTC แƒ“แƒ Firebase-แƒ˜แƒ—
แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ”แƒ‘แƒ˜แƒก แƒกแƒ˜แƒ แƒ—แƒแƒ›แƒแƒจแƒ˜แƒก แƒจแƒ˜แƒ’แƒœแƒ˜แƒ— แƒ“แƒ แƒ›แƒ—แƒแƒ•แƒแƒ  แƒ’แƒ•แƒ”แƒ แƒ“แƒ–แƒ”

แƒกแƒแƒ™แƒ”แƒขแƒ”แƒ‘แƒ˜แƒก แƒ“แƒแƒœแƒ”แƒ แƒ’แƒ•แƒ

แƒฉแƒ•แƒ”แƒœ แƒ’แƒ•แƒ˜แƒœแƒ“แƒ แƒจแƒ”แƒ•แƒฅแƒ›แƒœแƒแƒ— API, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ›แƒแƒฅแƒกแƒ˜แƒ›แƒแƒšแƒฃแƒ แƒแƒ“ แƒแƒฎแƒšแƒแƒก แƒ˜แƒฅแƒœแƒ”แƒ‘แƒ Posix UDP Sockets-แƒ—แƒแƒœ, แƒ แƒแƒ—แƒ แƒ›แƒ˜แƒœแƒ˜แƒ›แƒฃแƒ›แƒแƒ›แƒ“แƒ” แƒ›แƒ˜แƒ•แƒ˜แƒงแƒ•แƒแƒœแƒแƒ— แƒกแƒแƒญแƒ˜แƒ แƒ แƒชแƒ•แƒšแƒ˜แƒšแƒ”แƒ‘แƒ”แƒ‘แƒ˜แƒก แƒ แƒแƒแƒ“แƒ”แƒœแƒแƒ‘แƒ.

แƒฉแƒ•แƒ”แƒœ แƒแƒกแƒ”แƒ•แƒ” แƒ’แƒ•แƒ˜แƒœแƒ“แƒ แƒ’แƒแƒœแƒ•แƒแƒฎแƒแƒ แƒชแƒ˜แƒ”แƒšแƒแƒ— แƒกแƒแƒญแƒ˜แƒ แƒ แƒ›แƒ˜แƒœแƒ˜แƒ›แƒฃแƒ›แƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒกแƒแƒญแƒ˜แƒ แƒแƒ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒฃแƒ›แƒแƒ แƒขแƒ˜แƒ•แƒ”แƒกแƒ˜ แƒ’แƒแƒชแƒ•แƒšแƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒฅแƒกแƒ”แƒšแƒจแƒ˜.

แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒแƒ“, แƒฉแƒ•แƒ”แƒœ แƒแƒ  แƒ’แƒ•แƒญแƒ˜แƒ แƒ“แƒ”แƒ‘แƒ แƒ แƒ”แƒแƒšแƒฃแƒ แƒ˜ แƒ›แƒแƒ แƒจแƒ แƒฃแƒขแƒ˜แƒ–แƒแƒชแƒ˜แƒ: แƒงแƒ•แƒ”แƒšแƒ แƒ—แƒแƒœแƒแƒขแƒแƒšแƒ˜ แƒแƒ แƒ˜แƒก แƒ”แƒ แƒ—แƒกแƒ แƒ“แƒ แƒ˜แƒ›แƒแƒ•แƒ” โ€žแƒ•แƒ˜แƒ แƒขแƒฃแƒแƒšแƒฃแƒ  LAN-แƒ–แƒ”โ€œ, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ“แƒแƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ Firebase แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒ‘แƒแƒ–แƒ˜แƒก แƒ™แƒแƒœแƒ™แƒ แƒ”แƒขแƒฃแƒš แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒ—แƒแƒœ.

แƒแƒ›แƒ˜แƒขแƒแƒ›, แƒฉแƒ•แƒ”แƒœ แƒแƒ  แƒ’แƒ•แƒญแƒ˜แƒ แƒ“แƒ”แƒ‘แƒ แƒฃแƒœแƒ˜แƒ™แƒแƒšแƒฃแƒ แƒ˜ IP แƒ›แƒ˜แƒกแƒแƒ›แƒแƒ แƒ—แƒ”แƒ‘แƒ˜: แƒฃแƒœแƒ˜แƒ™แƒแƒšแƒฃแƒ แƒ˜ Firebase แƒ’แƒแƒกแƒแƒฆแƒ”แƒ‘แƒ˜แƒก แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒ”แƒ‘แƒ˜ (แƒ“แƒแƒ›แƒ”แƒœแƒ˜แƒก แƒกแƒแƒฎแƒ”แƒšแƒ”แƒ‘แƒ˜แƒก แƒ›แƒกแƒ’แƒแƒ•แƒกแƒ˜) แƒกแƒแƒ™แƒ›แƒแƒ แƒ˜แƒกแƒ˜แƒ แƒ—แƒแƒœแƒแƒขแƒแƒšแƒ”แƒ‘แƒ˜แƒก แƒชแƒแƒšแƒกแƒแƒฎแƒแƒ“ แƒ˜แƒ“แƒ”แƒœแƒขแƒ˜แƒคแƒ˜แƒชแƒ˜แƒ แƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒ“แƒ แƒ—แƒ˜แƒ—แƒแƒ”แƒฃแƒšแƒ˜ แƒ—แƒแƒœแƒแƒขแƒแƒšแƒ˜ แƒแƒ“แƒ’แƒ˜แƒšแƒแƒ‘แƒ แƒ˜แƒ•แƒแƒ“ แƒแƒœแƒ˜แƒญแƒ”แƒ‘แƒก "แƒงแƒแƒšแƒ‘" IP แƒ›แƒ˜แƒกแƒแƒ›แƒแƒ แƒ—แƒ”แƒ‘แƒก แƒ—แƒ˜แƒ—แƒแƒ”แƒฃแƒš แƒ’แƒแƒกแƒแƒฆแƒ”แƒ‘แƒก, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒฃแƒœแƒ“แƒ แƒ˜แƒ—แƒแƒ แƒ’แƒ›แƒœแƒแƒก. แƒ”แƒก แƒ›แƒ—แƒšแƒ˜แƒแƒœแƒแƒ“ แƒ’แƒแƒ›แƒแƒ แƒ˜แƒชแƒฎแƒแƒ•แƒก แƒ’แƒšแƒแƒ‘แƒแƒšแƒฃแƒ แƒ˜ IP แƒ›แƒ˜แƒกแƒแƒ›แƒแƒ แƒ—แƒ˜แƒก แƒ›แƒ˜แƒœแƒ˜แƒญแƒ”แƒ‘แƒ˜แƒก แƒแƒฃแƒชแƒ˜แƒšแƒ”แƒ‘แƒšแƒแƒ‘แƒแƒก, แƒ แƒแƒช แƒแƒ แƒแƒขแƒ แƒ˜แƒ•แƒ˜แƒแƒšแƒฃแƒ แƒ˜ แƒแƒ›แƒแƒชแƒแƒœแƒแƒ.

แƒแƒฅ แƒแƒ แƒ˜แƒก แƒ›แƒ˜แƒœแƒ˜แƒ›แƒแƒšแƒฃแƒ แƒ˜ API, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒฃแƒœแƒ“แƒ แƒ’แƒแƒœแƒ•แƒแƒฎแƒแƒ แƒชแƒ˜แƒ”แƒšแƒแƒ—:

// 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);

API แƒแƒ แƒ˜แƒก แƒ›แƒแƒ แƒขแƒ˜แƒ•แƒ˜ แƒ“แƒ แƒ›แƒกแƒ’แƒแƒ•แƒกแƒ˜ Posix Sockets API-แƒก, แƒ›แƒแƒ’แƒ แƒแƒ› แƒแƒฅแƒ•แƒก แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ˜แƒ›แƒ” แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ•แƒแƒœแƒ˜ แƒ’แƒแƒœแƒกแƒฎแƒ•แƒแƒ•แƒ”แƒ‘แƒ: แƒ–แƒแƒ แƒ”แƒ‘แƒ˜แƒก แƒแƒฆแƒ แƒ˜แƒชแƒฎแƒ•แƒ, แƒแƒ“แƒ’แƒ˜แƒšแƒแƒ‘แƒ แƒ˜แƒ•แƒ˜ IP-แƒ”แƒ‘แƒ˜แƒก แƒ›แƒ˜แƒœแƒ˜แƒญแƒ”แƒ‘แƒ แƒ“แƒ แƒ–แƒแƒ แƒ›แƒแƒชแƒ˜ แƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ”แƒ‘แƒ˜.

แƒ–แƒแƒ แƒ”แƒ‘แƒ˜แƒก แƒ แƒ”แƒ’แƒ˜แƒกแƒขแƒ แƒแƒชแƒ˜แƒ

แƒ›แƒแƒจแƒ˜แƒœแƒแƒช แƒ™แƒ˜, แƒ—แƒฃ แƒ—แƒแƒ•แƒ“แƒแƒžแƒ˜แƒ แƒ•แƒ”แƒšแƒ˜ แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ แƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒก แƒแƒ แƒแƒ“แƒแƒ‘แƒšแƒแƒ™แƒ•แƒ˜แƒก I/O-แƒก, แƒ™แƒแƒ“แƒ˜ แƒฃแƒœแƒ“แƒ แƒ˜แƒงแƒแƒก แƒ แƒ”แƒคแƒแƒฅแƒขแƒแƒ แƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜, แƒ แƒแƒ› แƒ˜แƒ›แƒฃแƒจแƒแƒแƒก แƒ•แƒ”แƒ‘ แƒ‘แƒ แƒแƒฃแƒ–แƒ”แƒ แƒจแƒ˜.

แƒแƒ›แƒ˜แƒก แƒ›แƒ˜แƒ–แƒ”แƒ–แƒ˜ แƒ˜แƒก แƒแƒ แƒ˜แƒก, แƒ แƒแƒ› แƒ‘แƒ แƒแƒฃแƒ–แƒ”แƒ แƒจแƒ˜ แƒฆแƒแƒœแƒ˜แƒกแƒซแƒ˜แƒ”แƒ‘แƒ˜แƒก แƒชแƒ˜แƒ™แƒšแƒ˜ แƒ“แƒแƒ›แƒแƒšแƒฃแƒšแƒ˜แƒ แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ˜แƒกแƒ’แƒแƒœ (แƒ˜แƒฅแƒœแƒ”แƒ‘แƒ แƒ”แƒก JavaScript แƒ—แƒฃ WebAssembly).

แƒ›แƒจแƒแƒ‘แƒšแƒ˜แƒฃแƒ  แƒ’แƒแƒ แƒ”แƒ›แƒแƒจแƒ˜ แƒจแƒ”แƒ’แƒ•แƒ˜แƒซแƒšแƒ˜แƒ แƒแƒกแƒ”แƒ—แƒ˜ แƒ™แƒแƒ“แƒ˜แƒก แƒ“แƒแƒฌแƒ”แƒ แƒ

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

แƒšแƒแƒ™แƒแƒšแƒฃแƒ แƒ˜ IP แƒ›แƒ˜แƒœแƒ˜แƒญแƒ”แƒ‘แƒ

แƒฉแƒ•แƒ”แƒœแƒก "แƒฅแƒกแƒ”แƒšแƒจแƒ˜" แƒ™แƒ•แƒแƒœแƒซแƒ”แƒ‘แƒ˜แƒก ID แƒแƒ  แƒแƒ แƒ˜แƒก IP แƒ›แƒ˜แƒกแƒแƒ›แƒแƒ แƒ—แƒ”แƒ‘แƒ˜, แƒแƒ แƒแƒ›แƒ”แƒ“ Firebase แƒ’แƒแƒกแƒแƒฆแƒ”แƒ‘แƒ”แƒ‘แƒ˜ (แƒ˜แƒกแƒ˜แƒœแƒ˜ แƒแƒ แƒ˜แƒก แƒกแƒขแƒ แƒ˜แƒฅแƒแƒœแƒ”แƒ‘แƒ˜, แƒ แƒแƒ›แƒšแƒ”แƒ‘แƒ˜แƒช แƒแƒกแƒ” แƒ’แƒแƒ›แƒแƒ˜แƒงแƒฃแƒ แƒ”แƒ‘แƒ: -LmEC50PYZLCiCP-vqde ).

แƒ”แƒก แƒ›แƒแƒกแƒแƒฎแƒ”แƒ แƒฎแƒ”แƒ‘แƒ”แƒšแƒ˜แƒ, แƒ แƒแƒ“แƒ’แƒแƒœ แƒฉแƒ•แƒ”แƒœ แƒแƒ  แƒ’แƒ•แƒญแƒ˜แƒ แƒ“แƒ”แƒ‘แƒ IP-แƒ”แƒ‘แƒ˜แƒก แƒ›แƒ˜แƒœแƒ˜แƒญแƒ”แƒ‘แƒ˜แƒก แƒ“แƒ แƒ›แƒแƒ—แƒ˜ แƒฃแƒœแƒ˜แƒ™แƒแƒšแƒฃแƒ แƒแƒ‘แƒ˜แƒก แƒจแƒ”แƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒ˜แƒก แƒ›แƒ”แƒฅแƒแƒœแƒ˜แƒ–แƒ›แƒ˜ (แƒแƒกแƒ”แƒ•แƒ” แƒ™แƒšแƒ˜แƒ”แƒœแƒขแƒ˜แƒก แƒ’แƒแƒ—แƒ˜แƒจแƒ•แƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒ›แƒแƒ—แƒ˜ แƒ’แƒแƒœแƒ™แƒแƒ แƒ’แƒ•แƒ), แƒ›แƒแƒ’แƒ แƒแƒ› แƒฎแƒจแƒ˜แƒ แƒแƒ“ แƒกแƒแƒญแƒ˜แƒ แƒแƒ แƒ—แƒแƒœแƒแƒขแƒแƒšแƒ”แƒ‘แƒ˜แƒก แƒ˜แƒ“แƒ”แƒœแƒขแƒ˜แƒคแƒ˜แƒชแƒ˜แƒ แƒ”แƒ‘แƒ แƒ แƒ˜แƒชแƒฎแƒ•แƒ˜แƒ—แƒ˜ แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒ˜แƒ—.

แƒ”แƒก แƒแƒ แƒ˜แƒก แƒ–แƒฃแƒกแƒขแƒแƒ“ แƒ˜แƒก, แƒ แƒ˜แƒกแƒ—แƒ•แƒ˜แƒกแƒแƒช แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ”แƒ‘แƒ˜. resolve ะธ reverseResolve: แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ แƒ แƒแƒ’แƒแƒ แƒฆแƒแƒช แƒ˜แƒฆแƒ”แƒ‘แƒก แƒ’แƒแƒกแƒแƒฆแƒ”แƒ‘แƒ˜แƒก แƒกแƒขแƒ แƒ˜แƒฅแƒแƒœแƒ˜แƒก แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒแƒก (แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒšแƒ˜แƒก แƒจแƒ”แƒงแƒ•แƒแƒœแƒ˜แƒก แƒแƒœ แƒซแƒ˜แƒ แƒ˜แƒ—แƒแƒ“แƒ˜ แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ˜แƒก แƒ›แƒ”แƒจแƒ•แƒ”แƒแƒ‘แƒ˜แƒ—) แƒ“แƒ แƒจแƒ”แƒฃแƒซแƒšแƒ˜แƒ แƒ›แƒ˜แƒกแƒ˜ แƒ’แƒแƒ“แƒแƒงแƒ•แƒแƒœแƒ IP แƒ›แƒ˜แƒกแƒแƒ›แƒแƒ แƒ—แƒแƒ“ แƒจแƒ˜แƒ“แƒ แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก. แƒ“แƒแƒœแƒแƒ แƒฉแƒ”แƒœแƒ˜ API แƒแƒกแƒ”แƒ•แƒ” แƒ˜แƒฆแƒ”แƒ‘แƒก แƒแƒ› แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒแƒก แƒกแƒขแƒ แƒ˜แƒฅแƒแƒœแƒ˜แƒก แƒœแƒแƒชแƒ•แƒšแƒแƒ“ แƒกแƒ˜แƒ›แƒแƒ แƒขแƒ˜แƒ•แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก.

แƒ”แƒก แƒ›แƒกแƒ’แƒแƒ•แƒกแƒ˜แƒ DNS-แƒ˜แƒก แƒซแƒ˜แƒ”แƒ‘แƒแƒกแƒ—แƒแƒœ, แƒ›แƒแƒ’แƒ แƒแƒ› แƒจแƒ”แƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒแƒ“แƒ’แƒ˜แƒšแƒแƒ‘แƒ แƒ˜แƒ•แƒแƒ“ แƒ™แƒšแƒ˜แƒ”แƒœแƒขแƒ–แƒ”.

แƒแƒœแƒฃ IP แƒ›แƒ˜แƒกแƒแƒ›แƒแƒ แƒ—แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ–แƒ˜แƒแƒ แƒ”แƒ‘แƒ แƒแƒ  แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒกแƒฎแƒ•แƒแƒ“แƒแƒกแƒฎแƒ•แƒ แƒ™แƒšแƒ˜แƒ”แƒœแƒขแƒ”แƒ‘แƒก แƒจแƒแƒ แƒ˜แƒก แƒ“แƒ แƒ—แƒฃ แƒกแƒแƒญแƒ˜แƒ แƒแƒ แƒ แƒแƒ˜แƒ›แƒ” แƒกแƒแƒฎแƒ˜แƒก แƒ’แƒšแƒแƒ‘แƒแƒšแƒฃแƒ แƒ˜ แƒ˜แƒ“แƒ”แƒœแƒขแƒ˜แƒคแƒ˜แƒ™แƒแƒขแƒแƒ แƒ˜, แƒ˜แƒก แƒกแƒฎแƒ•แƒแƒ’แƒ•แƒแƒ แƒแƒ“ แƒฃแƒœแƒ“แƒ แƒ’แƒ”แƒœแƒ”แƒ แƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ˜แƒงแƒแƒก.

แƒ–แƒแƒ แƒ›แƒแƒชแƒ˜ แƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ˜

UDP แƒแƒ  แƒกแƒแƒญแƒ˜แƒ แƒแƒ”แƒ‘แƒก แƒ™แƒแƒ•แƒจแƒ˜แƒ แƒก, แƒ›แƒแƒ’แƒ แƒแƒ› แƒ แƒแƒ’แƒแƒ แƒช แƒ•แƒœแƒแƒฎแƒ”แƒ—, WebRTC แƒ›แƒแƒ˜แƒ—แƒฎแƒแƒ•แƒก แƒฎแƒแƒœแƒ’แƒ แƒซแƒšแƒ˜แƒ• แƒ“แƒแƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ”แƒ‘แƒ˜แƒก แƒžแƒ แƒแƒชแƒ”แƒกแƒก, แƒกแƒแƒœแƒแƒ› แƒ˜แƒก แƒจแƒ”แƒซแƒšแƒ”แƒ‘แƒก แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒ’แƒแƒ“แƒแƒชแƒ”แƒ›แƒแƒก แƒแƒ  แƒ—แƒแƒœแƒแƒขแƒแƒšแƒก แƒจแƒแƒ แƒ˜แƒก.

แƒ—แƒฃ แƒฉแƒ•แƒ”แƒœ แƒ’แƒ•แƒกแƒฃแƒ แƒก แƒ›แƒ˜แƒ•แƒแƒฌแƒแƒ“แƒแƒ— แƒแƒ‘แƒกแƒขแƒ แƒแƒฅแƒชแƒ˜แƒ˜แƒก แƒ˜แƒ’แƒ˜แƒ•แƒ” แƒ“แƒแƒœแƒ”, (sendto/recvfrom แƒ—แƒ•แƒ˜แƒ—แƒœแƒ”แƒ‘แƒฃแƒ  แƒ—แƒแƒœแƒแƒขแƒแƒšแƒ”แƒ‘แƒ—แƒแƒœ แƒฌแƒ˜แƒœแƒแƒกแƒฌแƒแƒ แƒ˜ แƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ˜แƒก แƒ’แƒแƒ แƒ”แƒจแƒ”), แƒ›แƒแƒจแƒ˜แƒœ แƒ›แƒแƒ— แƒฃแƒœแƒ“แƒ แƒจแƒ”แƒแƒกแƒ แƒฃแƒšแƒแƒœ "แƒ–แƒแƒ แƒ›แƒแƒชแƒ˜" (แƒ“แƒแƒ’แƒ•แƒ˜แƒแƒœแƒ”แƒ‘แƒฃแƒšแƒ˜) แƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ˜ API-แƒจแƒ˜.

แƒ”แƒก แƒแƒ แƒ˜แƒก แƒ˜แƒก, แƒ แƒแƒช แƒฎแƒ“แƒ”แƒ‘แƒ "แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒกแƒ" แƒ“แƒ "แƒ™แƒšแƒ˜แƒ”แƒœแƒขแƒก" แƒจแƒแƒ แƒ˜แƒก แƒœแƒแƒ แƒ›แƒแƒšแƒฃแƒ แƒ˜ แƒ™แƒแƒ›แƒฃแƒœแƒ˜แƒ™แƒแƒชแƒ˜แƒ˜แƒก แƒ“แƒ แƒแƒก UDP-แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒกแƒแƒก แƒ“แƒ แƒ แƒ แƒฃแƒœแƒ“แƒ แƒ’แƒแƒแƒ™แƒ”แƒ—แƒแƒก แƒฉแƒ•แƒ”แƒœแƒ›แƒ แƒ‘แƒ˜แƒ‘แƒšแƒ˜แƒแƒ—แƒ”แƒ™แƒแƒ›:

  • แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ˜แƒก แƒ–แƒแƒ แƒ”แƒ‘แƒ˜ bind()แƒแƒชแƒœแƒแƒ‘แƒแƒก แƒแƒžแƒ”แƒ แƒแƒชแƒ˜แƒฃแƒš แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒแƒก, แƒ แƒแƒ› แƒ›แƒแƒก แƒกแƒฃแƒ แƒก แƒ›แƒ˜แƒ˜แƒฆแƒแƒก แƒžแƒแƒ™แƒ”แƒขแƒ”แƒ‘แƒ˜ แƒ›แƒ˜แƒ—แƒ˜แƒ—แƒ”แƒ‘แƒฃแƒš แƒžแƒแƒ แƒขแƒ–แƒ”.

แƒแƒ›แƒ˜แƒก แƒœแƒแƒชแƒ•แƒšแƒแƒ“, แƒฉแƒ•แƒ”แƒœ แƒ’แƒแƒ›แƒแƒ•แƒแƒฅแƒ•แƒ”แƒงแƒœแƒ”แƒ‘แƒ— แƒฆแƒ˜แƒ แƒžแƒแƒ แƒขแƒก Firebase แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ˜แƒก แƒ’แƒแƒกแƒแƒฆแƒ”แƒ‘แƒ˜แƒก แƒฅแƒ•แƒ”แƒจ แƒ“แƒ แƒ›แƒแƒ•แƒฃแƒกแƒ›แƒ”แƒœแƒ— แƒ›แƒแƒ•แƒšแƒ”แƒœแƒ”แƒ‘แƒก แƒ›แƒ˜แƒก แƒฅแƒ•แƒ”แƒฎแƒ”แƒจแƒ˜.

  • แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ˜แƒก แƒ–แƒแƒ แƒ”แƒ‘แƒ˜ recvfrom(), แƒแƒ› แƒžแƒแƒ แƒขแƒ˜แƒก แƒœแƒ”แƒ‘แƒ˜แƒกแƒ›แƒ˜แƒ”แƒ แƒ˜ แƒฐแƒแƒกแƒขแƒ˜แƒ“แƒแƒœ แƒจแƒ”แƒ›แƒแƒกแƒฃแƒšแƒ˜ แƒžแƒแƒ™แƒ”แƒขแƒ”แƒ‘แƒ˜แƒก แƒ›แƒ˜แƒฆแƒ”แƒ‘แƒ.

แƒฉแƒ•แƒ”แƒœแƒก แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜, แƒฉแƒ•แƒ”แƒœ แƒฃแƒœแƒ“แƒ แƒจแƒ”แƒ•แƒแƒ›แƒแƒฌแƒ›แƒแƒ— แƒแƒ› แƒžแƒแƒ แƒขแƒจแƒ˜ แƒ’แƒแƒ’แƒ–แƒแƒ•แƒœแƒ˜แƒšแƒ˜ แƒžแƒแƒ™แƒ”แƒขแƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒ›แƒแƒ›แƒแƒ•แƒแƒšแƒ˜ แƒ แƒ˜แƒ’แƒ˜.

แƒ—แƒ˜แƒ—แƒแƒ”แƒฃแƒš แƒžแƒแƒ แƒขแƒก แƒแƒฅแƒ•แƒก แƒ—แƒแƒ•แƒ˜แƒกแƒ˜ แƒ แƒ˜แƒ’แƒ˜ แƒ“แƒ แƒฉแƒ•แƒ”แƒœ แƒ•แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ— แƒฌแƒงแƒแƒ แƒแƒกแƒ แƒ“แƒ แƒ“แƒแƒœแƒ˜แƒจแƒœแƒฃแƒšแƒ”แƒ‘แƒ˜แƒก แƒžแƒแƒ แƒขแƒ”แƒ‘แƒก WebRTC แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒ’แƒ แƒแƒ›แƒ”แƒ‘แƒ˜แƒก แƒ“แƒแƒกแƒแƒฌแƒงแƒ˜แƒกแƒจแƒ˜, แƒ แƒแƒ—แƒ แƒ•แƒ˜แƒชแƒแƒ“แƒ”แƒ—, แƒ แƒแƒ›แƒ”แƒš แƒ แƒ˜แƒ’แƒจแƒ˜ แƒ’แƒแƒ“แƒแƒ•แƒแƒ’แƒ–แƒแƒ•แƒœแƒแƒ— แƒแƒฎแƒแƒšแƒ˜ แƒžแƒแƒ™แƒ”แƒขแƒ˜แƒก แƒ›แƒแƒกแƒ•แƒšแƒ˜แƒกแƒแƒก.

แƒ–แƒแƒ แƒ˜ แƒแƒ  แƒแƒ แƒ˜แƒก แƒ“แƒแƒ‘แƒšแƒแƒ™แƒ˜แƒšแƒ˜, แƒแƒกแƒ” แƒ แƒแƒ›, แƒ—แƒฃ แƒžแƒแƒ™แƒ”แƒขแƒ”แƒ‘แƒ˜ แƒแƒ  แƒแƒ แƒ˜แƒก, แƒฉแƒ•แƒ”แƒœ แƒฃแƒ‘แƒ แƒแƒšแƒแƒ“ แƒ•แƒแƒ‘แƒ แƒฃแƒœแƒ”แƒ‘แƒ— -1 แƒ“แƒ แƒ•แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ— errno=EWOULDBLOCK.

  • แƒ™แƒšแƒ˜แƒ”แƒœแƒขแƒ˜ แƒ˜แƒฆแƒ”แƒ‘แƒก แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ˜แƒก IP-แƒก แƒ“แƒ แƒžแƒแƒ แƒขแƒก แƒ’แƒแƒ แƒ™แƒ•แƒ”แƒฃแƒšแƒ˜ แƒ’แƒแƒ แƒ” แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒ”แƒ‘แƒ˜แƒ— แƒ“แƒ แƒ–แƒแƒ แƒ”แƒ‘แƒก sendto(). แƒ”แƒก แƒแƒกแƒ”แƒ•แƒ” แƒแƒฎแƒ“แƒ”แƒœแƒก แƒจแƒ˜แƒ“แƒ แƒ–แƒแƒ แƒก. bind(), แƒจแƒ”แƒกแƒแƒ‘แƒแƒ›แƒ˜แƒกแƒแƒ“ แƒจแƒ”แƒ›แƒ“แƒ’แƒแƒ›แƒ˜ recvfrom() แƒ›แƒ˜แƒ˜แƒฆแƒ”แƒ‘แƒก แƒžแƒแƒกแƒฃแƒฎแƒก แƒชแƒแƒšแƒกแƒแƒฎแƒแƒ“ แƒจแƒ”แƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ แƒ”แƒจแƒ”.

แƒฉแƒ•แƒ”แƒœแƒก แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜, แƒ™แƒšแƒ˜แƒ”แƒœแƒขแƒ˜ แƒ’แƒแƒ แƒ”แƒ“แƒแƒœ แƒ˜แƒฆแƒ”แƒ‘แƒก แƒกแƒขแƒ แƒ˜แƒฅแƒแƒœแƒ˜แƒก แƒ™แƒšแƒแƒ•แƒ˜แƒจแƒก แƒ“แƒ แƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒก แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒแƒก resolve() IP แƒ›แƒ˜แƒกแƒแƒ›แƒแƒ แƒ—แƒ˜แƒก แƒ›แƒ˜แƒกแƒแƒฆแƒ”แƒ‘แƒแƒ“.

แƒแƒ› แƒ”แƒขแƒแƒžแƒ–แƒ”, แƒฉแƒ•แƒ”แƒœ แƒ•แƒ˜แƒฌแƒงแƒ”แƒ‘แƒ— WebRTC แƒฎแƒ”แƒšแƒ˜แƒก แƒฉแƒแƒ›แƒแƒ แƒ—แƒ›แƒ”แƒ•แƒแƒก, แƒ—แƒฃ แƒแƒ แƒ˜ แƒ—แƒแƒœแƒแƒขแƒแƒšแƒ˜ แƒฏแƒ”แƒ  แƒแƒ  แƒแƒ แƒ˜แƒก แƒ“แƒแƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ”แƒ แƒ—แƒ›แƒแƒœแƒ”แƒ—แƒ—แƒแƒœ. แƒ”แƒ แƒ—แƒ˜แƒ“แƒแƒ˜แƒ’แƒ˜แƒ•แƒ” แƒ—แƒแƒœแƒแƒขแƒแƒšแƒ˜แƒก แƒกแƒฎแƒ•แƒแƒ“แƒแƒกแƒฎแƒ•แƒ แƒžแƒแƒ แƒขแƒ”แƒ‘แƒ—แƒแƒœ แƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ”แƒ‘แƒ˜ แƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒก แƒ˜แƒ›แƒแƒ•แƒ” WebRTC DataChannel-แƒก.

แƒฉแƒ•แƒ”แƒœ แƒแƒกแƒ”แƒ•แƒ” แƒ•แƒแƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒ— แƒแƒ แƒแƒžแƒ˜แƒ แƒ“แƒแƒžแƒ˜แƒ  bind()แƒ แƒแƒ—แƒ แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ›แƒ แƒจแƒ”แƒซแƒšแƒแƒก แƒฎแƒ”แƒšแƒแƒฎแƒšแƒ แƒ“แƒแƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ”แƒ‘แƒ แƒจแƒ”แƒ›แƒ“แƒ”แƒ’แƒจแƒ˜ sendto() แƒ—แƒฃ แƒ แƒแƒ˜แƒ›แƒ” แƒ›แƒ˜แƒ–แƒ”แƒ–แƒ˜แƒ— แƒ“แƒแƒ˜แƒฎแƒฃแƒ แƒ.

แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒก แƒ”แƒชแƒœแƒแƒ‘แƒ”แƒ‘แƒ แƒ™แƒšแƒ˜แƒ”แƒœแƒขแƒ˜แƒก แƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘, แƒ แƒแƒ“แƒ”แƒกแƒแƒช แƒ™แƒšแƒ˜แƒ”แƒœแƒขแƒ˜ แƒฌแƒ”แƒ แƒก แƒ—แƒแƒ•แƒ˜แƒก SDP แƒจแƒ”แƒ—แƒแƒ•แƒแƒ–แƒ”แƒ‘แƒแƒก แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ˜แƒก แƒžแƒแƒ แƒขแƒ˜แƒก แƒ˜แƒœแƒคแƒแƒ แƒ›แƒแƒชแƒ˜แƒ˜แƒก แƒฅแƒ•แƒ”แƒจ Firebase-แƒจแƒ˜ แƒ“แƒ แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ˜ แƒžแƒแƒกแƒฃแƒฎแƒแƒ‘แƒก แƒ˜แƒฅ แƒ—แƒแƒ•แƒ˜แƒกแƒ˜ แƒžแƒแƒกแƒฃแƒฎแƒ˜แƒ—.

แƒฅแƒ•แƒ”แƒ›แƒแƒ— แƒ›แƒแƒชแƒ”แƒ›แƒฃแƒšแƒ˜ แƒ“แƒ˜แƒแƒ’แƒ แƒแƒ›แƒ แƒ’แƒ•แƒ˜แƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒก แƒจแƒ”แƒขแƒงแƒแƒ‘แƒ˜แƒœแƒ”แƒ‘แƒ”แƒ‘แƒ˜แƒก แƒœแƒแƒ™แƒแƒ“แƒ˜แƒก แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒก แƒกแƒแƒ™แƒ”แƒขแƒ˜แƒก แƒกแƒฅแƒ”แƒ›แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒ“แƒ แƒžแƒ˜แƒ แƒ•แƒ”แƒšแƒ˜ แƒจแƒ”แƒขแƒงแƒแƒ‘แƒ˜แƒœแƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ“แƒแƒชแƒ”แƒ›แƒ แƒ™แƒšแƒ˜แƒ”แƒœแƒขแƒ˜แƒ“แƒแƒœ แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ–แƒ”:

แƒ›แƒ แƒแƒ•แƒแƒšแƒ›แƒแƒ—แƒแƒ›แƒแƒจแƒ˜แƒแƒœแƒ˜ แƒ—แƒแƒ›แƒแƒจแƒ˜แƒก แƒžแƒแƒ แƒขแƒ˜แƒ แƒ”แƒ‘แƒ C++-แƒ“แƒแƒœ แƒ˜แƒœแƒขแƒ”แƒ แƒœแƒ”แƒขแƒจแƒ˜ Cheerp, WebRTC แƒ“แƒ Firebase-แƒ˜แƒ—
แƒ™แƒšแƒ˜แƒ”แƒœแƒขแƒกแƒ แƒ“แƒ แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒก แƒจแƒแƒ แƒ˜แƒก แƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ˜แƒก แƒคแƒแƒ–แƒ˜แƒก แƒกแƒ แƒฃแƒšแƒ˜ แƒ“แƒ˜แƒแƒ’แƒ แƒแƒ›แƒ

แƒ“แƒแƒกแƒ™แƒ•แƒœแƒ

แƒ—แƒฃ แƒแƒฅแƒแƒ›แƒ“แƒ” แƒฌแƒแƒ˜แƒ™แƒ˜แƒ—แƒฎแƒ”แƒ—, แƒแƒšแƒ‘แƒแƒ— แƒ’แƒแƒ˜แƒœแƒขแƒ”แƒ แƒ”แƒกแƒ”แƒ‘แƒ— แƒ—แƒ”แƒแƒ แƒ˜แƒ˜แƒก แƒ›แƒแƒฅแƒ›แƒ”แƒ“แƒ”แƒ‘แƒแƒจแƒ˜ แƒ“แƒแƒœแƒแƒฎแƒ•แƒ. แƒ—แƒแƒ›แƒแƒจแƒ˜แƒก แƒ—แƒแƒ›แƒแƒจแƒ˜ แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒ”แƒšแƒ˜แƒ teeworlds.leaningtech.com, แƒกแƒชแƒแƒ“แƒ”!


แƒแƒ›แƒฎแƒแƒœแƒแƒ’แƒฃแƒ แƒ˜ แƒ›แƒแƒขแƒฉแƒ˜ แƒ™แƒแƒšแƒ”แƒ’แƒ”แƒ‘แƒก แƒจแƒแƒ แƒ˜แƒก

แƒฅแƒกแƒ”แƒšแƒ˜แƒก แƒ‘แƒ˜แƒ‘แƒšแƒ˜แƒแƒ—แƒ”แƒ™แƒ˜แƒก แƒ™แƒแƒ“แƒ˜ แƒ—แƒแƒ•แƒ˜แƒกแƒฃแƒคแƒšแƒแƒ“ แƒแƒ แƒ˜แƒก แƒฎแƒ”แƒšแƒ›แƒ˜แƒกแƒแƒฌแƒ•แƒ“แƒแƒ›แƒ˜ แƒแƒฅ Github. แƒจแƒ”แƒฃแƒ”แƒ แƒ—แƒ“แƒ˜แƒ— แƒกแƒแƒฃแƒ‘แƒแƒ แƒก แƒฉแƒ•แƒ”แƒœแƒก แƒแƒ แƒฎแƒ–แƒ”: Gitter!

แƒฌแƒงแƒแƒ แƒ: www.habr.com

แƒแƒฎแƒแƒšแƒ˜ แƒ™แƒแƒ›แƒ”แƒœแƒขแƒแƒ แƒ˜แƒก แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ