рд╣рдо рдПрдХ рд╕рдВрджреЗрд╢рд╡рд╛рд╣рдХ рдмрдирд╛рддреЗ рд╣реИрдВ * рдЬреЛ рд▓рд┐рдлреНрдЯ рдореЗрдВ рднреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ

* рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╣рдо рдХреЗрд╡рд▓ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рд▓рд┐рдЦреЗрдВрдЧреЗред

рд╢рд╛рдпрдж рдЖрдкрдиреЗ рднреА рдРрд╕реА рд╣реА рд╕реНрдерд┐рддрд┐ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд┐рдпрд╛ рд╣реИ - рдЕрдкрдиреЗ рдкрд╕рдВрджреАрджрд╛ рджреВрдд рдореЗрдВ рдмреИрдареЗ, рджреЛрд╕реНрддреЛрдВ рдХреЗ рд╕рд╛рде рдмрд╛рддреЗрдВ рдХрд░рддреЗ рд╣реБрдП, рд▓рд┐рдлреНрдЯ / рд╕реБрд░рдВрдЧ / рдЧрд╛рдбрд╝реА рдореЗрдВ рдЬрд╛рддреЗ рд╣реИрдВ, рдФрд░ рдЗрдВрдЯрд░рдиреЗрдЯ рдЕрднреА рднреА рдкрдХрдбрд╝ рдореЗрдВ рдЖрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреБрдЫ рднреА рдирд╣реАрдВ рднреЗрдЬрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ? рдпрд╛ рдХрднреА-рдХрднреА рдЖрдкрдХреЗ рд╕рдВрдЪрд╛рд░ рдкреНрд░рджрд╛рддрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдХреЛ рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ 50% рдкреИрдХреЗрдЯ рдЧрд╛рдпрдм рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ, рдФрд░ рдХреБрдЫ рднреА рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рд╢рд╛рдпрдж рдЖрдк рдЙрд╕ рдкрд▓ рдХреЛ рд╕реЛрдЪ рд░рд╣реЗ рдереЗ - рдареАрдХ рд╣реИ, рдЖрдк рд╢рд╛рдпрдж рдХрд┐рд╕реА рддрд░рд╣ рдХреБрдЫ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдЦрд░рд╛рдм рдХрдиреЗрдХреНрд╢рди рдХреЗ рд╕рд╛рде рдЖрдк рдЕрднреА рднреА рдЙрд╕ рдЫреЛрдЯреЗ рд╕реЗ рдкрд╛рда рдХреЛ рднреЗрдЬ рд╕рдХреЗрдВ рдЬреЛ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ? рдЖрдк рдЕрдХреЗрд▓реЗ рдирд╣реАрдВ рд╣реИрдВред

рдЪрд┐рддреНрд░ рд╕реНрд░реЛрдд

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

рдЯреАрд╕реАрдкреА / рдЖрдИрдкреА рдореБрджреНрджреЗ


рдЬрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдЦрд░рд╛рдм (рдореЛрдмрд╛рдЗрд▓) рдХрдиреЗрдХреНрд╢рди рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдкреИрдХреЗрдЯ рдХрд╛ рдПрдХ рдмрдбрд╝рд╛ рдкреНрд░рддрд┐рд╢рдд рдЦреЛрдирд╛ рд╢реБрд░реВ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ (рдпрд╛ рдмрд╣реБрдд рд▓рдВрдмреЗ рд╕рдордп рддрдХ рджреЗрд░реА рдХреЗ рд╕рд╛рде), рдФрд░ рдЯреАрд╕реАрдкреА / рдЖрдИрдкреА рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдЗрд╕реЗ рдПрдХ рд╕рдВрдХреЗрдд рдХреЗ рд░реВрдк рдореЗрдВ рдорд╣рд╕реВрд╕ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдиреЗрдЯрд╡рд░реНрдХ рднреАрдбрд╝рднрд╛рдбрд╝ рд╣реИ, рдФрд░ рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрддрд╛ рд╣реИ, рдЕрдЧрд░ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░ред рдпрд╣ рдЦреБрд╢реА рдирд╣реАрдВ рдЬреЛрдбрд╝рддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдХрдиреЗрдХреНрд╢рди (рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЯреАрдПрд▓рдПрд╕) рдХреА рд╕реНрдерд╛рдкрдирд╛ рдХреЗ рд▓рд┐рдП рдХрдИ рдкреИрдХреЗрдЯ рднреЗрдЬрдиреЗ рдФрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЫреЛрдЯреЗ рдиреБрдХрд╕рд╛рди рднреА рдЗрд╕рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЛ рдмрд╣реБрдд рдмреБрд░реА рддрд░рд╣ рд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рднреА рдЕрдХреНрд╕рд░ рдХрдиреЗрдХреНрд╢рди рдХреА рд╕реНрдерд╛рдкрдирд╛ рд╕реЗ рдкрд╣рд▓реЗ DNS рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ - рдХреБрдЫ рдФрд░ рдЕрддрд┐рд░рд┐рдХреНрдд рдкреИрдХреЗрдЯред

рд╕рднреА рдореЗрдВ, рдПрдХ рдЦрд░рд╛рдм рдХрдиреЗрдХреНрд╢рди рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЯреАрд╕реАрдкреА / рдЖрдИрдкреА рдЖрдзрд╛рд░рд┐рдд рд░реАрд╕реНрдЯ рдПрдкреАрдЖрдИ рдХреА рд╕рдорд╕реНрдпрд╛рдПрдВ:

  • рдкреИрдХреЗрдЯ рдиреБрдХрд╕рд╛рди рдХреА рдЦрд░рд╛рдм рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ (рддреЗрдЬ рдЧрддрд┐ рдореЗрдВ рдХрдореА, рдмрдбрд╝реЗ рд╕рдордп рдХреЗ рдЕрдВрддрд░рд╛рд▓)
  • рдХрдиреЗрдХреНрд╢рди рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреИрдХреЗрдЯ рдПрдХреНрд╕рдЪреЗрдВрдЬ (+3 рдкреИрдХреЗрдЯ) рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ
  • IP рд╕рд░реНрд╡рд░ (+2 рдкреИрдХреЗрдЯ) рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдХреНрд╕рд░ рдЖрдкрдХреЛ "рдЕрддрд┐рд░рд┐рдХреНрдд" DNS рдХреНрд╡реЗрд░реА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ
  • рдЕрдХреНрд╕рд░ рдЯреАрдПрд▓рдПрд╕ (рдиреНрдпреВрдирддрдо 2 рдкреИрдХреЗрдЯ) рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ

рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░, рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдХреЗрд╡рд▓ рд╕рд░реНрд╡рд░ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ 3-7 рдкреИрдХреЗрдЯ рднреЗрдЬрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдФрд░ рдЙрдЪреНрдЪ рдкреНрд░рддрд┐рд╢рдд рдиреБрдХрд╕рд╛рди рдХреЗ рд╕рд╛рде, рдХрдиреЗрдХреНрд╢рди рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд░рд╛рд╢рд┐ рд▓реЗ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рд╣рдордиреЗ рдЕрднреА рддрдХ рдХреБрдЫ рднреА рдирд╣реАрдВ рднреЗрдЬрд╛ рд╣реИред

рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рд╡рд┐рдЪрд╛рд░


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

рдЙрддреНрдкрд╛рджрди-рддреИрдпрд╛рд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рд╕рдВрднрд╛рд╡рд┐рдд рдиреБрдХрд╕рд╛рди


рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЪреАрдЬреЗрдВ рд╣реИрдВ (рдмрд┐рдирд╛ рдХрд┐рд╕реА рдорддрд▓рдм рдХреЗ) рдЙрди рд╕рднреА рдЪреАрдЬрд╝реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдкрдХреЛ "рдореБрдХрд╛рдмрд▓рд╛" рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╕реЛрдЪрдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ:

  1. рдкреНрд░рджрд╛рддрд╛ рджреНрд╡рд╛рд░рд╛ рдпреВрдбреАрдкреА рдХреЛ "рдХрдЯ" рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ - рдЖрдкрдХреЛ рдЯреАрд╕реАрдкреА / рдЖрдИрдкреА рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП
  2. UDP NAT рдХреЗ рд╕рд╛рде рджреЛрд╕реНрддрд╛рдирд╛ рдирд╣реАрдВ рд╣реИ - рдЖрдорддреМрд░ рдкрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдЕрдиреБрд░реЛрдз рдХрд╛ рдЬрд╡рд╛рдм рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдХрдо (~ 30 рд╕реЗрдХрдВрдб) рд╕рдордп рд╣реЛрддрд╛ рд╣реИ
  3. рд╕рд░реНрд╡рд░ рдХреЛ рд╣рдорд▓реЗ рд╣рд╛рд╕рд┐рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рд░реЛрдзреА рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП - рдЖрдкрдХреЛ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкреИрдХреЗрдЯ рдЕрдиреБрд░реЛрдз рдкреИрдХреЗрдЯ рд╕реЗ рдЕрдзрд┐рдХ рдирд╣реАрдВ рд╣реИ
  4. рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдореБрд╢реНрдХрд┐рд▓ рд╣реИ, рдФрд░ рдпрджрд┐ рдЖрдк рдПрдХ рд╕реБрд░рдХреНрд╖рд╛ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮ рдирд╣реАрдВ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЗрд╕реЗ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдмрд╣реБрдд рдХрдо рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ
  5. рдпрджрд┐ рдЖрдк рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рд░рд┐рдЯреНрд░рд╛рдВрд╕рдорд┐рд╢рди рдЕрдВрддрд░рд╛рд▓ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рд░ рд╕реЗрдХрдВрдб рджреЛрдмрд╛рд░рд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдлрд┐рд░ рд╕реЗ рдмрд┐рдирд╛ рд░реБрдХреЗ рдХреЛрд╢рд┐рд╢ рдХрд░рдирд╛), рддреЛ рдЖрдк рдЯреАрд╕реАрдкреА / рдЖрдИрдкреА рд╕реЗ рдмрд╣реБрдд рдЦрд░рд╛рдм рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
  6. рдпреВрдбреАрдкреА рдФрд░ рдЕрдВрддрд╣реАрди рд░рд┐рдЯреНрд░реАрдЯ рдореЗрдВ рдлреАрдбрдмреИрдХ рди рд╣реЛрдиреЗ рдХреЗ рдХрд╛рд░рдг рдЖрдкрдХреЗ рдЯреНрд░реИрдлрд╝рд┐рдХ рдореЗрдВ рдЕрдзрд┐рдХ рдЯреНрд░реИрдлрд╝рд┐рдХ рдЖрдирд╛ рд╢реБрд░реВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ
  7. рд╕рд░реНрд╡рд░ рдореЗрдВ рдХрдИ рдЖрдИрдкреА рдкрддреЗ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рд╡реЗ рд╕рдордп рдХреЗ рд╕рд╛рде рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдХреИрд╢ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ :))

рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди


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

//  Go. //      buf := make([]byte, maxUDPPacketSize) //   UDP addr, _ := net.ResolveUDPAddr("udp", fmt.Sprintf("0.0.0.0:%d", serverPort)) conn, _ := net.ListenUDP("udp", addr) for { //   UDP,      n, uaddr, _ := conn.ReadFromUDP(buf) req := string(buf[0:n]) parts := strings.SplitN(req, " ", 2) //          curTs := time.Now().UnixNano() clientTs, _ := strconv.Atoi(parts[0]) //       -      //   conn.WriteToUDP([]byte(fmt.Sprintf("%d %d", curTs, clientTs)), uaddr) } 

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

 //   addr, _ := net.ResolveUDPAddr("udp", fmt.Sprintf("%s:%d", serverIP, serverPort)) conn, _ := net.DialUDP("udp", nil, addr) //  UDP      ,     . resCh := make(chan udpResult, 10) go readResponse(conn, resCh) for i := 0; i < numMessages; i++ { requestID := time.Now().UnixNano() send(conn, requestID, resCh) } 

рдлрд╝реАрдЪрд░ рдХреЛрдб:

 func send(conn *net.UDPConn, requestID int64, resCh chan udpResult) { for { //     ,       . conn.Write([]byte(fmt.Sprintf("%d %s", requestID, testMessageText))) if waitReply(requestID, time.After(time.Second), resCh) { return } } } //   ,  . //      ,   ,   // ,        , //   . func waitReply(requestID int64, timeout <-chan time.Time, resCh chan udpResult) (ok bool) { for { select { case res := <-resCh: if res.requestTs == requestID { return true } case <-timeout: return false } } } //    type udpResult struct { serverTs int64 requestTs int64 } //           . func readResp(conn *net.UDPConn, resCh chan udpResult) { buf := make([]byte, maxUDPPacketSize) for { n, _, _ := conn.ReadFromUDP(buf) respStr := string(buf[0:n]) parts := strings.SplitN(respStr, " ", 2) var res udpResult res.serverTs, _ = strconv.ParseInt(parts[0], 10, 64) res.requestTs, _ = strconv.ParseInt(parts[1], 10, 64) resCh <- res } } 

рдореИрдВрдиреЗ (рдХрдореЛрдмреЗрд╢) рдорд╛рдирдХ REST рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рднреА рдпрд╣реА рдмрд╛рдд рд▓рд╛рдЧреВ рдХреА: HTTP POST рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рд╣рдо рдПрдХ рд╣реА рд░рд┐рдХреНрд╡реЗрд╕реНрдЯ рдФрд░ рдореИрд╕реЗрдЬ рдЯреЗрдХреНрд╕реНрдЯ рднреЗрдЬрддреЗ рд╣реИрдВ рдФрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рддреЗ рд╣реИрдВ, рдлрд┐рд░ рдЕрдЧрд▓реЗ рдПрдХ рдкрд░ рдЬрд╛рддреЗ рд╣реИрдВред рдбреЛрдореЗрди рдирд╛рдо рд╕реЗ рдЕрдкреАрд▓ рдХреА рдЧрдИ рдереА, рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ DNS рдХреИрд╢рд┐рдВрдЧ рдирд┐рд╖рд┐рджреНрдз рдирд╣реАрдВ рдерд╛ред рддреБрд▓рдирд╛ рдХреЛ рдЕрдзрд┐рдХ рдИрдорд╛рдирджрд╛рд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП HTTPS рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ (рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдореЗрдВ рдХреЛрдИ рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдирд╣реАрдВ рд╣реИ)ред рдЯрд╛рдЗрдордЖрдЙрдЯ 15 рд╕реЗрдХрдВрдб рдкрд░ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛: рдЯреАрд╕реАрдкреА / рдЖрдИрдкреА рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЦреЛрдП рд╣реБрдП рдкреИрдХреЗрдЯреЛрдВ рдХреЛ рдЕрдЧреНрд░реЗрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рд╕рдВрднрд╡рддрдГ 15 рд╕реЗрдХрдВрдб рд╕реЗ рдЬреНрдпрд╛рджрд╛ рдЗрдВрддрдЬрд╛рд░ рдирд╣реАрдВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рдкрд░реАрдХреНрд╖рдг, рдкрд░рд┐рдгрд╛рдо


рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рддреЗ рд╕рдордп, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЪреАрдЬреЛрдВ рдХреЛ рдорд╛рдкрд╛ рдЧрдпрд╛ (рд╕рднреА рдорд┐рд▓реАрд╕реЗрдХрдВрдб рдореЗрдВ ):

  1. рдкрд╣рд▓реА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╕рдордп (рдкрд╣рд▓реЗ)
  2. рдФрд╕рдд рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╕рдордп (рдФрд╕рдд)
  3. рдЕрдзрд┐рдХрддрдо рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╕рдордп (рдЕрдзрд┐рдХрддрдо)
  4. рдПрдЪрдбреА / рдпреВ - рдЕрдиреБрдкрд╛рдд "рдПрдЪрдЯреАрдЯреАрдкреА рд╕рдордп" / "рдпреВрдбреАрдкреА рд╕рдордп" - рдпреВрдбреАрдкреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдХрд┐рддрдиреА рдмрд╛рд░ рдХрдо рджреЗрд░реА

10 рдЕрдиреБрд░реЛрдзреЛрдВ рдХреА 100 рд╢реНрд░реГрдВрдЦрд▓рд╛ рдмрдирд╛рдИ рдЧрдИ рдереА - рд╣рдо рдПрдХ рдРрд╕реА рд╕реНрдерд┐рддрд┐ рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░рддреЗ рд╣реИрдВ рдЬрдм рдЖрдкрдХреЛ рдмрд╕ рдХреБрдЫ рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рд╕рд╛рдорд╛рдиреНрдп рдЗрдВрдЯрд░рдиреЗрдЯ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореЗрдЯреНрд░реЛ рдореЗрдВ рд╡рд╛рдИ-рдлрд╛рдИ, рдпрд╛ рд╕рдбрд╝рдХ рдкрд░ 3 рдЬреА / рдПрд▓рдЯреАрдИ) рдЙрдкрд▓рдмреНрдз рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред

рд╕рдВрдЪрд╛рд░ рдХреЗ рдкрд░реАрдХреНрд╖рдг рдХреЗ рдкреНрд░рдХрд╛рд░:


  1. рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ "рдмрд╣реБрдд рдмреБрд░рд╛ рдиреЗрдЯрд╡рд░реНрдХ" (10% рд╣рд╛рдирд┐, 500 рдПрдордПрд╕ рд╡рд┐рд▓рдВрдмрддрд╛, 1 рдПрдордмреАрдкреАрдПрд╕) рдиреЗрдЯрд╡рд░реНрдХ рд▓рд┐рдВрдХ рдХрдВрдбреАрд╢рдирд░ рдореЗрдВ - "рдмрд╣реБрдд рдЦрд░рд╛рдм"
  2. EDGE, рдлреНрд░рд┐рдЬ рдореЗрдВ рдЯреЗрд▓реАрдлреЛрди ("рдПрд▓реЗрд╡реЗрдЯрд░") - рдлреНрд░рд┐рдЬ
  3. рдПрдЬ
  4. 3 рдЬреА
  5. рдПрд▓рдЯреАрдИ
  6. рд╡рд╛рдИ-рдлрд╛рдИ

рдкрд░рд┐рдгрд╛рдо (рдорд┐рд▓реАрд╕реЗрдХрдВрдб рдореЗрдВ рд╕рдордп):




( рд╕реАрдПрд╕рд╡реА рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рднреА )

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


рдпрд╣рд╛рдВ рдирддреАрдЬреЗ рджрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред

  1. рдПрд▓рдЯреАрдИ рд╡рд┐рд╕рдВрдЧрддрд┐ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдкрд╣рд▓рд╛ рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рдореЗрдВ рдЕрдВрддрд░ рдЕрдзрд┐рдХ рд╕реЗ рдЕрдзрд┐рдХ рд╣реИ, рдЦрд░рд╛рдм рдХрдиреЗрдХреНрд╢рди (рдФрд╕рддрди, 2-3 рдмрд╛рд░ рддреЗрдЬреА рд╕реЗ)
  2. рдЗрд╕рдХреЗ рдмрд╛рдж HTTP рдореЗрдВ рд╕рдВрджреЗрд╢ рднреЗрдЬрдирд╛ рдЬреНрдпрд╛рджрд╛ рдзреАрдорд╛ рдирд╣реАрдВ рд╣реИ - рдФрд╕рддрди 1.3 рдЧреБрдирд╛ рдзреАрдорд╛, рд▓реЗрдХрд┐рди рд╕реНрдерд┐рд░ рд╡рд╛рдИ-рдлрд╛рдИ рдкрд░ рдХреЛрдИ рдЕрдВрддрд░ рдирд╣реАрдВ рд╣реИ
  3. UDP- рдЖрдзрд╛рд░рд┐рдд рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╕рдордп рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕реНрдерд┐рд░ рд╣реИ, рдЬреЛ рдЕрдкреНрд░рддреНрдпрдХреНрд╖ рд░реВрдк рд╕реЗ рдЕрдзрд┐рдХрддрдо рд╡рд┐рд▓рдВрдмрддрд╛ рджреНрд╡рд╛рд░рд╛ рджреЗрдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ - рдпрд╣ рднреА 1.4-1.8 рдЧреБрдирд╛ рдХрдо рд╣реИ

рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдЙрдЪрд┐рдд ("рдЦрд░рд╛рдм") рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЗ рддрд╣рдд, рд╣рдорд╛рд░рд╛ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдмрд╣реБрдд рдмреЗрд╣рддрд░ рдХрд╛рдо рдХрд░реЗрдЧрд╛, рдЦрд╛рд╕рдХрд░ рдЬрдм рдкрд╣рд▓рд╛ рд╕рдВрджреЗрд╢ рднреЗрдЬ рд░рд╣рд╛ рд╣реЛ (рдЕрдХреНрд╕рд░ рдпрд╣ рд╕рдм рднреЗрдЬрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП)ред

рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди


рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдЧрд┐рддреБрдм рдкрд░ рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ ред рдЙрддреНрдкрд╛рджрди рдореЗрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд░реЗрдВ!

рдлреЛрди рдпрд╛ рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреА рдЖрдЬреНрдЮрд╛:
 instant-im -client -num 10 
ред рд╕рд░реНрд╡рд░ рдЕрднреА рднреА рдЪрд▓ рд░рд╣рд╛ рд╣реИ :)ред рдкрд╣рд▓реЗ рдЙрддреНрддрд░ рдХреЗ рд╕рдордп, рд╕рд╛рде рд╣реА рдЕрдзрд┐рдХрддрдо рджреЗрд░реА рдкрд░ рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рджреЗрдЦрдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдпрд╣ рд╕рд╛рд░рд╛ рдбреЗрдЯрд╛ рдЖрдЦрд┐рд░ рдореЗрдВ рдЫрдкрд╛ рд╣реИред

рд▓рд┐рдлреНрдЯ рд▓реЙрдиреНрдЪ рдЙрджрд╛рд╣рд░рдг


Source: https://habr.com/ru/post/hi435026/


All Articles