Go рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдЙрджреНрдпреЛрдЧрдХреЛ рд▓рд╛рдЧрд┐ рдмреНрд▓рдХрдЪреЗрди рд╡рд┐рдХрд╛рд╕ред рднрд╛рдЧ 1

рдо рдЕрд╣рд┐рд▓реЗ рдЪрд╛рд░ рдорд╣рд┐рдирд╛рджреЗрдЦрд┐ "рдмреНрд▓рдХрдЪреЗрдирдорд╛ рдЖрдзрд╛рд░рд┐рдд рд╕рд░рдХрд╛рд░реА рд░ рдФрджреНрдпреЛрдЧрд┐рдХ рдХреНрд╖реЗрддреНрд░рд╣рд░реВрдорд╛ рдбрд╛рдЯрд╛ рд╕рдВрд░рдХреНрд╖рдг рд░ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрди рдЙрдкрдХрд░рдгрд╣рд░реВрдХреЛ рд╡рд┐рдХрд╛рд╕" рднрдиреНрдиреЗ рдкрд░рд┐рдпреЛрдЬрдирд╛рдорд╛ тАЛтАЛрдХрд╛рдо рдЧрд░рд┐рд░рд╣реЗрдХреЛ рдЫреБред
рдЕрдм рдо рддрдкрд╛рдЗрдБрд▓рд╛рдИ рдпреЛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╕рд░реА рд╕реБрд░реБ рдЧрд░реЗрдХреЛ рдмрд╛рд░реЗ рдмрддрд╛рдЙрди рдЪрд╛рд╣рдиреНрдЫреБ, рд░ рдЕрдм рдо рд╡рд┐рд╕реНрддреГрдд рд░реВрдкрдорд╛ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛрдб рд╡рд░реНрдгрди рдЧрд░реНрдиреЗрдЫреБред

Go рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдЙрджреНрдпреЛрдЧрдХреЛ рд▓рд╛рдЧрд┐ рдмреНрд▓рдХрдЪреЗрди рд╡рд┐рдХрд╛рд╕ред рднрд╛рдЧ 1

рд▓реЗрдЦрд╣рд░реВрдХреЛ рд╢реНрд░реГрдВрдЦрд▓рд╛рдорд╛ рдпреЛ рдкрд╣рд┐рд▓реЛ рд▓реЗрдЦ рд╣реЛред рдпрд╣рд╛рдБ рдо рд╕рд░реНрднрд░ рд░ рдкреНрд░реЛрдЯреЛрдХрд▓ рд╡рд░реНрдгрди рдЧрд░реНрдЫреБред рд╡рд╛рд╕реНрддрд╡рдорд╛, рдкрд╛рдардХрд▓реЗ рдпреА рдмреНрд▓рдХрдЪреЗрди рддрддреНрд╡рд╣рд░реВрдХреЛ рдЖрдлреНрдиреИ рд╕рдВрд╕реНрдХрд░рдгрд╣рд░реВ рдкрдирд┐ рд▓реЗрдЦреНрди рд╕рдХреНрдЫред

рд░ рдпрд╣рд╛рдБ рджреЛрд╕реНрд░реЛ рднрд╛рдЧ рдЫ тАФ рдмреНрд▓рдХрдЪреЗрди рд░ рд▓реЗрдирджреЗрди рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рд╣рд░реВ, рд╕рд╛рдереИ рдбрд╛рдЯрд╛рдмреЗрд╕рд╕рдБрдЧ рдЕрдиреНрддрд░рдХреНрд░рд┐рдпрд╛ рд▓рд╛рдЧреВ рдЧрд░реНрдиреЗ рдкреНрдпрд╛рдХреЗрдЬрдХреЛ рдмрд╛рд░реЗрдорд╛ред

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

рд╡рд┐рдХрд╛рд╕ рдЧреЛ рднрд╛рд╖рд╛рдорд╛ рд╣реБрдиреНрдЫ, рд░ рдбрд╛рдЯрд╛рдмреЗрд╕ рдЬрд╕рдорд╛ рдмреНрд▓рдХрд╣рд░реВ рднрдгреНрдбрд╛рд░рдг рдЧрд░рд┐рдиреНрдЫ LevelDB рд╣реЛред
рдореБрдЦреНрдп рднрд╛рдЧрд╣рд░реВ рдкреНрд░реЛрдЯреЛрдХрд▓ рд╣реБрдиреН, рд╕рд░реНрднрд░ (рдЬрд╕рд▓реЗ TCP рд░ WebSocket рдЪрд▓рд╛рдЙрдБрдЫ - рдкрд╣рд┐рд▓реЛ рдмреНрд▓рдХрдЪреЗрди рд╕рд┐рдЩреНрдХреНрд░реЛрдирд╛рдЗрдЬ рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐, рджреЛрд╕реНрд░реЛ рдХреНрд▓рд╛рдЗрдиреНрдЯрд╣рд░реВ рдЬрдбрд╛рди рдЧрд░реНрди, рдЬрд╛рднрд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯрдмрд╛рдЯ рд▓реЗрдирджреЗрди рд░ рдЖрджреЗрд╢рд╣рд░реВ рдкрдард╛рдЙрдирдХреЛ рд▓рд╛рдЧрд┐, рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐ред

рдЙрд▓реНрд▓реЗрдЦ рдЧрд░рд┐рдПрдЭреИрдВ, рдпреЛ рдмреНрд▓рдХрдЪреЗрди рдореБрдЦреНрдп рд░реВрдкрдорд╛ рдЖрдкреВрд░реНрддрд┐рдХрд░реНрддрд╛ рд░ рдЧреНрд░рд╛рд╣рдХрд╣рд░реВ, рд╡рд╛ рджреБрд╡реИ рдПрдХ рд╡реНрдпрдХреНрддрд┐рдорд╛ рдЙрддреНрдкрд╛рджрдирд╣рд░реВрдХреЛ рдЖрджрд╛рдирдкреНрд░рджрд╛рдирд▓рд╛рдИ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░ рд╕реБрд░рдХреНрд╖рд┐рдд рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫред рдпреА рдорд╛рдирд┐рд╕рд╣рд░реВ рдПрдХрдЕрд░реНрдХрд╛рд▓рд╛рдИ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдЧрд░реНрди рд╣рддрд╛рд░ рдЧрд░реНрджреИрдирдиреНред рддрд░ рдХрд╛рд░реНрдп рднрдиреЗрдХреЛ рдмрд┐рд▓реНрдЯ-рдЗрди рдХреНрдпрд╛рд▓рдХреБрд▓реЗрдЯрд░рдХреЛ рд╕рд╛рде "рдЪреЗрдХрдмреБрдХ" рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреБ рдорд╛рддреНрд░ рд╣реЛрдЗрди, рддрд░ рдЙрддреНрдкрд╛рджрдирдХреЛ рдЬреАрд╡рди рдЪрдХреНрд░рд╕рдБрдЧ рдХрд╛рдо рдЧрд░реНрджрд╛ рдЙрддреНрдкрдиреНрди рд╣реБрдиреЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рдирд┐рдпрдорд┐рдд рдХрд╛рд░реНрдпрд╣рд░реВрд▓рд╛рдИ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдЧрд░реНрдиреЗ рдкреНрд░рдгрд╛рд▓реА рд╣реЛред рдпрд╕ рдорд╛рдорд┐рд▓рд╛рдХреЛ рд▓рд╛рдЧрд┐ рдЬрд┐рдореНрдореЗрд╡рд╛рд░ рдмрд╛рдЗрдЯрдХреЛрдб, рдЬрд╕реНрддреИ рдХрд┐ рдмреНрд▓рдХрдЪреЗрдирд╣рд░реВрд╕рдБрдЧ рдкреНрд░рдЪрд▓рд┐рдд рдЫ, рд▓реЗрдирджреЗрдирдХреЛ рдЗрдирдкреБрдЯ рд░ рдЖрдЙрдЯрдкреБрдЯрд╣рд░реВрдорд╛ рднрдгреНрдбрд╛рд░ рдЧрд░рд┐рдПрдХреЛ рдЫ (рд▓реЗрдирджреЗрдирд╣рд░реВ рдЖрдлреИрдВ рдмреНрд▓рдХрд╣рд░реВрдорд╛ рднрдгреНрдбрд╛рд░ рдЧрд░рд┐рдПрдХреЛ рдЫ, LevelDB рдорд╛ рдмреНрд▓рдХрд╣рд░реВ GOB рдврд╛рдБрдЪрд╛рдорд╛ рдкреВрд░реНрд╡-рдЗрдиреНрдХреЛрдб рдЧрд░рд┐рдПрдХрд╛ рдЫрдиреН)ред рдкрд╣рд┐рд▓реЗ, рдкреНрд░реЛрдЯреЛрдХрд▓ рд░ рд╕рд░реНрднрд░ (рдЙрд░реНрдл рдиреЛрдб) рдХреЛ рдмрд╛рд░реЗрдорд╛ рдХреБрд░рд╛ рдЧрд░реМрдВред

рдкреНрд░реЛрдЯреЛрдХрд▓ рдЬрдЯрд┐рд▓ рдЫреИрди, рдпрд╕рдХреЛ рд╕рдореНрдкреВрд░реНрдг рдмрд┐рдиреНрджреБ рдХреЗрд╣рд┐ рдбрд╛рдЯрд╛ рд▓реЛрдб рдЧрд░реНрдиреЗ рдореЛрдбрдорд╛ рд╕реНрд╡рд┐рдЪ рдЧрд░реНрдиреБ рд╣реЛ, рд╕рд╛рдорд╛рдиреНрдпрддрдпрд╛ рдПрдХ рдмреНрд▓рдХ рд╡рд╛ рд▓реЗрдирджреЗрди, рд╡рд┐рд╢реЗрд╖ рдХрдорд╛рдгреНрдб рд▓рд╛рдЗрдирдХреЛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдорд╛, рд░ рдпреЛ рд╕реВрдЪреА рдЖрджрд╛рдирдкреНрд░рджрд╛рдирдХреЛ рд▓рд╛рдЧрд┐ рдкрдирд┐ рдЖрд╡рд╢реНрдпрдХ рдЫ, рддрд╛рдХрд┐ рдиреЛрдбрд▓рд╛рдИ рдерд╛рд╣рд╛ рдЫ рдХрд┐ рдпреЛ рдХреЛ рд╣реЛред рдЬреЛрдбрд┐рдПрдХреЛ рдЫ рд░ рддрд┐рдиреАрд╣рд░реВрд╕рдБрдЧ рдХрд╕рд░реА рд╡реНрдпрд╛рдкрд╛рд░ рдЧрд░реНрдиреЗ рдЫ (рд╕рд┐рдЩреНрдХреНрд░реЛрдирд╛рдЗрдЬреЗрд╕рди рд╕рддреНрд░рдХреЛ рд▓рд╛рдЧрд┐ рдЬрдбрд╛рди рдЧрд░рд┐рдПрдХрд╛ рдиреЛрдбрд╣рд░реВрд▓рд╛рдИ "рдЫрд┐рдореЗрдХреА" рдкрдирд┐ рднрдирд┐рдиреНрдЫ рдХрд┐рдирднрдиреЗ рддрд┐рдиреАрд╣рд░реВрдХреЛ IP рдЬреНрдЮрд╛рдд рдЫ рд░ рддрд┐рдиреАрд╣рд░реВрдХреЛ рд░рд╛рдЬреНрдп рдбреЗрдЯрд╛ рдореЗрдореЛрд░реАрдорд╛ рднрдгреНрдбрд╛рд░ рдЧрд░рд┐рдПрдХреЛ рдЫ)ред

рдЧреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░рд╣рд░реВрдХреЛ рдмреБрдЭрд╛рдЗрдорд╛ рдлреЛрд▓реНрдбрд░рд╣рд░реВ (рдбрд╛рдЗрд░реЗрдХреНрдЯрд░реАрд╣рд░реВ рд▓рд┐рдирдХреНрд╕рд▓реЗ рддрд┐рдиреАрд╣рд░реВрд▓рд╛рдИ рдХрд▓ рдЧрд░реНрджрдЫ) рд▓рд╛рдИ рдкреНрдпрд╛рдХреЗрдЬ рднрдирд┐рдиреНрдЫ, рддреНрдпрд╕реИрд▓реЗ рдпрд╕ рдбрд╛рдЗрд░реЗрдХреНрдЯрд░реАрдХреЛ рдЧреЛ рдХреЛрдбрдХреЛ рд╕рд╛рде рдкреНрд░рддреНрдпреЗрдХ рдлрд╛рдЗрд▓рдХреЛ рд╕реБрд░реБрдорд╛ рддрд┐рдиреАрд╣рд░реВрд▓реЗ рдкреНрдпрд╛рдХреЗрдЬ рдлреЛрд▓реНрдбрд░_рдирд╛рдо_where_this_file рдЕрд╡рд╕реНрдерд┐рдд рдЫ рд▓реЗрдЦреНрдЫрдиреНред рдЕрдиреНрдпрдерд╛, рддрдкрд╛рдЗрдБ рдХрдореНрдкрд╛рдЗрд▓рд░рдорд╛ рдкреНрдпрд╛рдХреЗрдЬ рдлрд┐рдб рдЧрд░реНрди рд╕рдХреНрд╖рдо рд╣реБрдиреБрд╣реБрдиреЗ рдЫреИрдиред рдЦреИрд░, рдпреЛ рднрд╛рд╖рд╛ рдЬрд╛рдиреНрдиреЗрд╣рд░реВрдХрд╛ рд▓рд╛рдЧрд┐ рдпреЛ рдХреБрдиреИ рд░рд╣рд╕реНрдп рдЫреИрдиред рдпрд╕реНрддрд╛ рдЫрдиреН рдкреНрдпрд╛рдХреЗрдЬрд╣рд░реБ:

  • рдиреЗрдЯрд╡рд░реНрдХ рд╕рдВрдЪрд╛рд░ (рд╕рд░реНрднрд░, рдЧреНрд░рд╛рд╣рдХ, рдкреНрд░реЛрдЯреЛрдХрд▓)
  • рднрдгреНрдбрд╛рд░рдг рд░ рдкреНрд░рд╕рд╛рд░рд┐рдд рдбрд╛рдЯрд╛рдХреЛ рд╕рдВрд░рдЪрдирд╛ (рдмреНрд▓рдХ, рд▓реЗрдирджреЗрди)
  • рдбрд╛рдЯрд╛рдмреЗрд╕ (рдмреНрд▓рдХрдЪреЗрди)
  • рд╕рд╣рдорддрд┐
  • рд╕реНрдЯреНрдпрд╛рдХреНрдб рднрд░реНрдЪреБрдЕрд▓ рдореЗрд╕рд┐рди (xvm)
  • рд╕рд╣рд╛рдпрдХ (рдХреНрд░рд┐рдкреНрдЯреЛ, рдкреНрд░рдХрд╛рд░рд╣рд░реВ) рддреНрдпреЛ рдЕрд╣рд┐рд▓реЗрдХреЛ рд▓рд╛рдЧрд┐ рд╣реЛред

рдпрд╣рд╛рдБ github рдХреЛ рд▓рд┐рдЩреНрдХ рдЫ

рдпреЛ рдПрдХ рд╢реИрдХреНрд╖рд┐рдХ рд╕рдВрд╕реНрдХрд░рдг рд╣реЛ, рдпрд╕рдорд╛ рдЕрдиреНрддрд░-рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЕрдиреНрддрд░рдХреНрд░рд┐рдпрд╛ рд░ рдзреЗрд░реИ рдкреНрд░рдпреЛрдЧрд╛рддреНрдордХ рдХрдореНрдкреЛрдиреЗрдиреНрдЯрд╣рд░реВ рдЫреИрдирдиреН, рддрд░ рд╕рдВрд░рдЪрдирд╛ рдЬрд╕рдорд╛ рд╡рд┐рдХрд╛рд╕ рднрдЗрд░рд╣реЗрдХреЛ рдЫ рддреНрдпрд╕рд╕рдБрдЧ рдореЗрд▓ рдЦрд╛рдиреНрдЫред рдпрджрд┐ рддрдкрд╛рдЗрдБрд╕рдБрдЧ рдЯрд┐рдкреНрдкрдгреАрд╣рд░реВрдорд╛ рд╕реБрдЭрд╛рд╡ рджрд┐рди рдХреЗрд╣рд┐ рдЫ рднрдиреЗ, рдо рдпрд╕рд▓рд╛рдИ рдердк рд╡рд┐рдХрд╛рд╕рдорд╛ рдзреНрдпрд╛рдирдорд╛ рд░рд╛рдЦреНрди рдкрд╛рдЙрдБрджрд╛ рдЦреБрд╕реА рд╣реБрдиреЗрдЫреБред рд░ рдЕрдм рд╕рд░реНрднрд░ рдХреЛ рдПрдХ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХреЛ рд▓рд╛рдЧреА рд░ рдкреНрд░реЛрдЯреЛрдХрд▓.

рдкрд╣рд┐рд▓реЗ рд╕рд░реНрднрд░ рд╣реЗрд░реМрдВред

рд╕рд░реНрднрд░ рд╕рдмрд░реБрдЯрд┐рдирд▓реЗ рдбрд╛рдЯрд╛ рд╕рд░реНрднрд░рдХреЛ рд░реВрдкрдорд╛ рдХрд╛рд░реНрдп рдЧрд░реНрджрдЫ рдЬреБрди рдкреНрд░реЛрдЯреЛрдХрд▓ рдкреНрдпрд╛рдХреЗрдЬрдмрд╛рдЯ рдбрд╛рдЯрд╛ рд╕рдВрд░рдЪрдирд╛рд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ TCP рдкреНрд░реЛрдЯреЛрдХрд▓рдХреЛ рд╢реАрд░реНрд╖рдорд╛ рдЪрд▓реНрдЫред

рджрд┐рдирдЪрд░реНрдпрд╛рд▓реЗ рдирд┐рдореНрди рдкреНрдпрд╛рдХреЗрдЬрд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджрдЫ: рд╕рд░реНрднрд░, рдкреНрд░реЛрдЯреЛрдХрд▓, рдкреНрд░рдХрд╛рд░ред рдкреНрдпрд╛рдХреЗрдЬрдорд╛ рдиреИ tcp_server.go рдбрд╛рдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рд╕рдорд╛рд╡реЗрд╢ рдЧрд░реНрджрдЫ рд╕реЗрд╡рд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реН.

type Serve struct {
	Port string
	BufSize int
	ST *types.Settings
}

рдпрд╕рд▓реЗ рдирд┐рдореНрди рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░рд╣рд░реВ рд╕реНрд╡реАрдХрд╛рд░ рдЧрд░реНрди рд╕рдХреНрдЫ:

  • рдиреЗрдЯрд╡рд░реНрдХ рдкреЛрд░реНрдЯ рдЬрд╕ рдорд╛рд░реНрдлрдд рдбрд╛рдЯрд╛ рдЖрджрд╛рди рдкреНрд░рджрд╛рди рдЧрд░рд┐рдиреЗрдЫ
  • JSON рдврд╛рдБрдЪрд╛рдорд╛ рд╕рд░реНрднрд░ рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди рдлрд╛рдЗрд▓
  • рдбрд┐рдмрдЧ рдореЛрдбрдорд╛ рдЪрд▓рд╛рдЙрдирдХреЛ рд▓рд╛рдЧрд┐ рдЭрдгреНрдбрд╛ (рдирд┐рдЬреА рдмреНрд▓рдХрдЪреЗрди)

рдкреНрд░рдЧрддрд┐:

  • JSON рдлрд╛рдЗрд▓рдмрд╛рдЯ рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди рдкрдвреНрдЫ
  • рдбрд┐рдмрдЧ рдореЛрдб рдлреНрд▓реНрдпрд╛рдЧ рдЬрд╛рдБрдЪ рдЧрд░рд┐рдПрдХреЛ рдЫ: рдпрджрд┐ рдпреЛ рд╕реЗрдЯ рдЧрд░рд┐рдПрдХреЛ рдЫ рднрдиреЗ, рдиреЗрдЯрд╡рд░реНрдХ рд╕рд┐рдЩреНрдХреНрд░реЛрдирд╛рдЗрдЬреЗрд╕рди рд╢реЗрдбреНрдпреВрд▓рд░ рд╕реБрд░реБ рдЧрд░рд┐рдПрдХреЛ рдЫреИрди рд░ рдмреНрд▓рдХрдЪреЗрди рд▓реЛрдб рдЧрд░рд┐рдПрдХреЛ рдЫреИрдиред
  • рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди рдбрд╛рдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдкреНрд░рд╛рд░рдореНрдн рдЧрд░реНрджреИ рд░ рд╕рд░реНрднрд░ рд╕реБрд░реБ рдЧрд░реНрджреИ

рд╕рд░реНрднрд░

  • рдкреНрд░реЛрдЯреЛрдХрд▓ рдЕрдиреБрд╕рд╛рд░ TCP рд╕рд░реНрднрд░ рд░ рдиреЗрдЯрд╡рд░реНрдХ рдЕрдиреНрддрд░рдХреНрд░рд┐рдпрд╛рдХреЛ рд╕реБрд░реБрд╡рд╛рдд рдЧрд░реНрджрдЫред
  • рдпрд╕рдорд╛ рдкреЛрд░реНрдЯ рдирдореНрдмрд░, рдмрдлрд░ рд╕рд╛рдЗрдЬ рд░ рд╕рдВрд░рдЪрдирд╛рдХреЛ рд▓рд╛рдЧрд┐ рд╕реВрдЪрдХ рд╕рдорд╛рд╡реЗрд╢ рднрдПрдХреЛ рд╕реЗрд╡рд╛ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдЫред рдкреНрд░рдХрд╛рд░рд╣рд░реВредрд╕реЗрдЯрд┐рдЩрд╣рд░реВ
  • рд░рди рд╡рд┐рдзрд┐рд▓реЗ рд╕рдЮреНрдЬрд╛рд▓ рдЕрдиреНрддрд░рдХреНрд░рд┐рдпрд╛ рд╕реБрд░реБ рдЧрд░реНрдЫ (рджрд┐рдИрдПрдХреЛ рдкреЛрд░реНрдЯрдорд╛ рдЖрдЧрдорди рдЬрдбрд╛рдирд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рд╕реБрдиреНрджреИ, рдЬрдм рдирдпрд╛рдБ рдЬрдбрд╛рди рдкреНрд░рд╛рдкреНрдд рд╣реБрдиреНрдЫ, рдпрд╕рдХреЛ рдкреНрд░рд╢реЛрдзрдирд▓рд╛рдИ рдирдпрд╛рдБ рдереНрд░реЗрдбрдорд╛ рдирд┐рдЬреА рд╣реНрдпрд╛рдиреНрдбрд▓ рд╡рд┐рдзрд┐рдорд╛ рд╕реНрдерд╛рдирд╛рдиреНрддрд░рдг рдЧрд░рд┐рдиреНрдЫ)
  • ╨Т рд╣реНрдпрд╛рдиреНрдбрд▓ рдЧрд░реНрдиреБрд╣реЛрд╕реН рдЬрдбрд╛рдирдмрд╛рдЯ рдбрд╛рдЯрд╛ рдмрдлрд░рдорд╛ рдкрдврд┐рдиреНрдЫ, рд╕реНрдЯреНрд░рд┐рдЩ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡рдорд╛ рд░реВрдкрд╛рдиреНрддрд░рд┐рдд рд╣реБрдиреНрдЫ рд░ рдкрд╛рд╕ рд╣реБрдиреНрдЫ рдкреНрд░реЛрдЯреЛрдХрд▓ред рдЫрдиреЛрдЯ
  • рдкреНрд░реЛрдЯреЛрдХрд▓ред рдЫрдиреЛрдЯ рдлрд░реНрдХрд╛рдЙрдБрдЫ рдкрд░рд┐рдгрд╛рдо рд╡рд╛ рддреНрд░реБрдЯрд┐ рдирд┐рдореНрддреНрдпрд╛рдЙрдБрдЫред рдкрд░рд┐рдгрд╛рдо рддреНрдпрд╕рдкрдЫрд┐ рд╣рд╕реНрддрд╛рдиреНрддрд░рдг рдЧрд░рд┐рдпреЛ protocolред рд╡реНрдпрд╛рдЦреНрдпрд╛рдЬреБрди рдлрд░реНрдХрд┐рдиреНрдЫ intrpr - рдкреНрд░рдХрд╛рд░ рдХреЛ рд╡рд╕реНрддреБ рдбреЗрдЯрд╛ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реН, рд╡рд╛ рдЪрдпрди рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╢реЛрдзрдирдорд╛ рддреНрд░реБрдЯрд┐ рдирд┐рдореНрддреНрдпрд╛рдЙрдБрдЫ
  • рддреНрдпрд╕рдкрдЫрд┐ рд╕реНрд╡рд┐рдЪ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЧрд░рд┐рдиреНрдЫ intrpr.commands[0] рдЬрд╕рд▓реЗ рдПрдЙрдЯрд╛ рдЬрд╛рдБрдЪ рдЧрд░реНрдЫ: рдкрд░рд┐рдгрд╛рдо, inv, рддреНрд░реБрдЯрд┐ рд░ рддреНрдпрд╣рд╛рдБ рдПрдХ рдЦрдгреНрдб рдЫ рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд
  • рдЦрдгреНрдбрдорд╛ рдкрд░рд┐рдгрд╛рдо рд╕реНрд╡рд┐рдЪ рдореВрд▓реНрдп рджреНрд╡рд╛рд░рд╛ рдкрд╛рдЗрдиреНрдЫ intrpr.commands[1] рдЬрд╕рд▓реЗ рдорд╛рдирд╣рд░реВ рдЬрд╛рдБрдЪ рдЧрд░реНрджрдЫ рдмрдлрд░ рд▓рдореНрдмрд╛рдЗ ╨╕ рд╕рдВрд╕реНрдХрд░рдг (рдкреНрд░рддреНрдпреЗрдХ рдЕрд╡рд╕реНрдерд╛рдорд╛ рд╕рдореНрдмрдиреНрдзрд┐рдд рдкреНрд░рдХрд╛рд░реНрдп рднрдирд┐рдиреНрдЫ)

рдХрд╛рд░реНрдпрд╣рд░реВ GetVersion ╨╕ рдмрдлрд░ рд▓рдореНрдмрд╛рдЗ рдлрд╛рдЗрд▓рдорд╛ рдЫрдиреН srvlib.go рд╕рд░реНрднрд░ рдкреНрдпрд╛рдХреЗрдЬ

GetVersion(conn net.Conn, version string)

рдпрд╕рд▓реЗ рдХреЗрд╡рд▓ рдХрдиреНрд╕реЛрд▓рдорд╛ рдкреНрд░рд┐рдиреНрдЯ рдЧрд░реНрджрдЫ рд░ рдЧреНрд░рд╛рд╣рдХрд▓рд╛рдИ рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░рдорд╛ рдкрд╛рд╕ рдЧрд░рд┐рдПрдХреЛ рд╕рдВрд╕реНрдХрд░рдг рдкрдард╛рдЙрдБрджрдЫ:

conn.Write([]byte("result:" + version))

.
рд╕рдорд╛рд░реЛрд╣

BufferLength(conn net.Conn, intrpr *protocol.InterpreteData)

рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдмреНрд▓рдХ, рд▓реЗрдирджреЗрди, рд╡рд╛ рдЕрдиреНрдп рд╡рд┐рд╢рд┐рд╖реНрдЯ рдбреЗрдЯрд╛ рд▓реЛрдб рдЧрд░реНрджрдЫ:

  • рдХрдиреНрд╕реЛрд▓рдорд╛ рдкреНрд░рд┐рдиреНрдЯ рдЧрд░реНрджрдЫ рдкреНрд░реЛрдЯреЛрдХрд▓рдорд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдбрд╛рдЯрд╛рдХреЛ рдкреНрд░рдХрд╛рд░ рдЬреБрди рд╕реНрд╡реАрдХрд╛рд░ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫ:
    fmt.Println("DataType:", intrpr.Commands[2])
  • рдореВрд▓реНрдп рдкрдвреНрдЫ intrpr.Body рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рдЪрд░рдорд╛ buf_len
  • рдмрдлрд░ рдмрдирд╛рдЙрдБрдЫ newbuf рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЖрдХрд╛рд░:
    make([]byte, buf_len)
  • рдПрдХ рдареАрдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкрдард╛рдЙрдБрдЫ:
    conn.Write([]byte("result:ok"))
  • рдкрдвреНрдиреЗ рд╕реНрдЯреНрд░рд┐рдордмрд╛рдЯ рдкреВрд░реНрдг рд░реВрдкрдорд╛ рдмрдлрд░ рднрд░реНрдЫ:
    io.ReadFull(conn, newbuf)

    .

  • рдХрдиреНрд╕реЛрд▓рдорд╛ рдмрдлрд░рдХреЛ рд╕рд╛рдордЧреНрд░реАрд╣рд░реВ рдЫрд╛рдкреНрдЫ
    fmt.Println(string(newbuf))

    рд░ рдкрдвреНрдиреЗ рдмрд╛рдЗрдЯрд╣рд░реВрдХреЛ рд╕рдВрдЦреНрдпрд╛

    fmt.Println("Bytes length:", n)
  • рдПрдХ рдареАрдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкрдард╛рдЙрдБрдЫ:
    conn.Write([]byte("result:ok"))

рд╕рд░реНрднрд░ рдкреНрдпрд╛рдХреЗрдЬрдмрд╛рдЯ рд╡рд┐рдзрд┐рд╣рд░реВ рдкреНрдпрд╛рдХреЗрдЬрдмрд╛рдЯ рдкреНрд░рдХрд╛рд░реНрдпрд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдкреНрд░рд╛рдкреНрдд рдбрд╛рдЯрд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЧрд░реНрди рдХрдиреНрдлрд┐рдЧрд░ рдЧрд░рд┐рдПрдХреЛ рдЫ рдкреНрд░реЛрдЯреЛрдХрд▓.

рдкреНрд░реЛрдЯреЛрдХрд▓

рдкреНрд░реЛрдЯреЛрдХрд▓рд▓реЗ рдиреЗрдЯрд╡рд░реНрдХ рдПрдХреНрд╕рдЪреЗрдиреНрдЬрдорд╛ рдбрд╛рдЯрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдЧрд░реНрдиреЗ рдорд╛рдзреНрдпрдордХреЛ рд░реВрдкрдорд╛ рдХрд╛рд░реНрдп рдЧрд░реНрджрдЫред

рдЫрдиреЛрдЯ (str рд╕реНрдЯреНрд░рд┐рдЩ) (рд╕реНрдЯреНрд░рд┐рдЩ, рддреНрд░реБрдЯрд┐) рд╕рд░реНрднрд░ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╛рдкреНрдд рдбрд╛рдЯрд╛ рдХреЛ рдкреНрд░рд╛рдердорд┐рдХ рдкреНрд░рд╢реЛрдзрди рдХрд╛рд░реНрдп рдЧрд░реНрджрдЫ, рдЗрдирдкреБрдЯ рдХреЛ рд░реВрдк рдорд╛ рдбрд╛рдЯрд╛ рдХреЛ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрджрдЫ рд░ рдХреЛ рд▓рд╛рдЧреА рддреИрдпрд╛рд░ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдлрд░реНрдХрд╛рдЙрдБрдЫ рджреЛрднрд╛рд╖реЗ:

  • рдЗрдирдкреБрдЯ рд╕реНрдЯреНрд░рд┐рдЩ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдЯрд╛рдЙрдХреЛ рд░ рд╢рд░реАрд░рдорд╛ рд╡рд┐рднрд╛рдЬрд┐рдд рдЧрд░рд┐рдПрдХреЛ рдЫ ReqParseN2(str)
  • рд╣реЗрдбрд▓рд╛рдИ рддрддреНрд╡рд╣рд░реВрдорд╛ рд╡рд┐рднрд╛рдЬрди рдЧрд░рд┐рдПрдХреЛ рдЫ рд░ ReqParseHead(head) рдХреЛ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдЖрджреЗрд╢рдХреЛ рдЯреБрдХреНрд░рд╛рдорд╛ рд░рд╛рдЦрд┐рдПрдХреЛ рдЫред
  • ╨Т рд╕реНрд╡рд┐рдЪ (рдЖрджреЗрд╢рд╣рд░реВ[0]) рдкреНрд░рд╛рдкреНрдд рдЖрджреЗрд╢ рдЪрдпрди рдЧрд░реНрдиреБрд╣реЛрд╕реН (cmd, рдХреБрдЮреНрдЬреА, рдареЗрдЧрд╛рдирд╛ рд╡рд╛ рдЦрдгреНрдб рдЯреНрд░рд┐рдЧрд░ рдЧрд░рд┐рдПрдХреЛ рдЫ рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд)
  • 2 рдЖрджреЗрд╢рд╣рд░реВ cmd рдорд╛ рдЬрд╛рдБрдЪ рдЧрд░рд┐рдПрдХреЛ рдЫ рд╕реНрд╡рд┐рдЪ(рдЖрджреЗрд╢рд╣рд░реВ[1]) тАФ рд▓рдореНрдмрд╛рдЗ ╨╕ рдкреНрд░рд╛рдкреНрдд рд╕рдВрд╕реНрдХрд░рдг.
  • рд▓рдореНрдмрд╛рдЗ рдбрд╛рдЯрд╛ рдкреНрд░рдХрд╛рд░ рдЬрд╛рдБрдЪ рдЧрд░реНрджрдЫ рдЖрджреЗрд╢рд╣рд░реВ[2] рд░ рдпрд╕рд▓рд╛рдИ рд╕реБрд░рдХреНрд╖рд┐рдд рдЧрд░реНрджрдЫ рдбрд╛рдЯрд╛рдЯрд╛рдЗрдк
  • рддреНрдпреЛ рдЬрд╛рдБрдЪреНрдЫ рдЬреАрдЙ рд╕реНрдЯреНрд░рд┐рдЩ рдорд╛рди рд╕рдорд╛рд╡реЗрд╢ рдЧрд░реНрджрдЫ
    len(body) < 1
  • рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╕реНрдЯреНрд░рд┐рдЩ рдлрд░реНрдХрд╛рдЙрдБрдЫ:
    "result:bufferlength:" + datatype + "/" + body
  • рдкреНрд░рд╛рдкреНрдд рд╕рдВрд╕реНрдХрд░рдг рд╕реНрдЯреНрд░рд┐рдЩ рдлрд░реНрдХрд╛рдЙрдБрдЫ
    return "result:version/auto"

рджреЛрднрд╛рд╖реЗ

InterpreteData рд╕рдВрд░рдЪрдирд╛ рд╕рдорд╛рд╡реЗрд╢ рдЧрд░реНрджрдЫ рд░ рдмрд╛рдЯ рдлрд░реНрдХрд╛рдЗрдПрдХреЛ рдбрд╛рдЯрд╛рдХреЛ рдорд╛рдзреНрдпрдорд┐рдХ рдкреНрд░рд╢реЛрдзрди рдЧрд░реНрджрдЫ рд╡рд┐рдХрд▓реНрдк рддрд╛рд░ рд░ рд╡рд╕реНрддреБ рдЧрдарди рдбреЗрдЯрд╛ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реН.

type InterpreteData struct {
	Head string
	Commands []string
	Body string
	IsErr bool
	ErrCode int 
	ErrMessage string
}

рд╕рдорд╛рд░реЛрд╣

Interprete(str string) (*InterpreteData, error)

рд╕реНрдЯреНрд░рд┐рдЩ рд╕реНрд╡реАрдХрд╛рд░ рдЧрд░реНрджрдЫ рдкрд░рд┐рдгрд╛рдо рд░ рд╡рд╕реНрддреБрдХреЛ рд╕рдиреНрджрд░реНрдн рд╕рд┐рд░реНрдЬрдирд╛ рд░ рдлрд░реНрдХрд╛рдЙрдБрдЫ рдбреЗрдЯрд╛ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реН.

рдкреНрд░рдЧрддрд┐:

  • рддреНрдпрд╕реИ рдЧрд░реА рд╡рд┐рдХрд▓реНрдк рдЯрд╛рдЙрдХреЛ рд░ рд╢рд░реАрд░ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдирд┐рдХрд╛рд▓рд┐рдиреНрдЫ ReqParseN2(str)
  • рдЯрд╛рдЙрдХреЛ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рддрддреНрд╡рд╣рд░реВрдорд╛ рд╡рд┐рднрд╛рдЬрд┐рдд рдЧрд░рд┐рдПрдХреЛ рдЫ ReqParseHead(рд╣реЗрдб)
  • рд╡рд╕реНрддреБ рдкреНрд░рд╛рд░рдореНрдн рдЧрд░рд┐рдПрдХреЛ рдЫ рдбреЗрдЯрд╛ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реН рд░ рдпрд╕рд▓рд╛рдИ рдПрдХ рд╕реВрдЪрдХ рдлрд░реНрдХрд╛рдЗрдиреНрдЫ:

res := &InterpreteData{
	Head: head,
	Commands: commands,
	Body: body,
}
return res, nil

рдпреЛ рд╡рд╕реНрддреБ рдорд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреНрдЫ server.go рдкреНрдпрд╛рдХреЗрдЬ рдореБрдЦреНрдпред

рдЧреНрд░рд╛рд╣рдХ

рдЧреНрд░рд╛рд╣рдХ рдкреНрдпрд╛рдХреЗрдЬрд▓реЗ рдХрд╛рд░реНрдпрд╣рд░реВ рд╕рдорд╛рд╡реЗрд╢ рдЧрд░реНрджрдЫ TCPConnect ╨╕ TCPresponseData.

рд╕рдорд╛рд░реЛрд╣

TCPConnect(s *types.Settings, data []byte, payload []byte)

рдпрд╕рд░реА рдХрд╛рдо рдЧрд░реНрджрдЫ:

  • рдкрд╛рд╕ рдЧрд░рд┐рдПрдХреЛ рд╕реЗрдЯрд┐рдЩ рд╡рд╕реНрддреБрдорд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЬрдбрд╛рдирдорд╛ рдЬрдбрд╛рди рдЧрд░рд┐рдПрдХреЛ рдЫ
    net.Dial("tcp", s.Host + ":" + s.Port)
  • рдбрд╛рдЯрд╛ рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░рдорд╛ рдкрд╛рд╕ рдЧрд░рд┐рдПрдХреЛ рдбрд╛рдЯрд╛ рдЯреНрд░рд╛рдиреНрд╕рдорд┐рдЯ рдЧрд░рд┐рдПрдХреЛ рдЫ:
    conn.Write(data)
  • рдЬрд╡рд╛рдл рдкрдвреНрдиреБ рдЫ
    resp, n, _ := TCPResponseData(conn, s.BufSize)

    рд░ рдХрдиреНрд╕реЛрд▓рдорд╛ рдЫрд╛рдкрд┐рдПрдХреЛ рдЫ

    fmt.Println(string(resp[:n]))
  • рд╕реНрдерд╛рдирд╛рдиреНрддрд░рдг рднрдПрдорд╛ рдкреЗрд▓реЛрдб рддреНрдпрд╕рдкрдЫрд┐ рдпрд╕рд▓рд╛рдИ рдкрд╛рд╕ рдЧрд░реНрджрдЫ
    conn.Write(payload)

    рд░ рд╕рд░реНрднрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкрдирд┐ рдкрдвреНрдЫ, рдХрдиреНрд╕реЛрд▓рдорд╛ рдкреНрд░рд┐рдиреНрдЯ рдЧрд░реНрджреИ

рд╕рдорд╛рд░реЛрд╣

 TCPResponseData(conn net.Conn, bufsiz int) ([]byte, int, error)

рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╕рд╛рдЗрдЬрдХреЛ рдмрдлрд░ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрджрдЫ, рддреНрдпрд╣рд╛рдБ рд╕рд░реНрднрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкрдвреНрдЫ рд░ рдпреЛ рдмрдлрд░ рд░ рдкрдвреНрдиреЗ рдмрд╛рдЗрдЯрд╣рд░реВрдХреЛ рд╕рдВрдЦреНрдпрд╛, рд╕рд╛рдереИ рддреНрд░реБрдЯрд┐ рд╡рд╕реНрддреБ рдлрд░реНрдХрд╛рдЙрдБрдЫред

рдЧреНрд░рд╛рд╣рдХ рд╕рдмрд░реБрдЯрд┐рди

рдиреЛрдб рд╕рд░реНрднрд░рд╣рд░реВрдорд╛ рдЖрджреЗрд╢рд╣рд░реВ рдкрдард╛рдЙрди, рд╕рд╛рдереИ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рддрдереНрдпрд╛рдЩреНрдХ рд░ рдкрд░реАрдХреНрд╖рдг рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрди рд╕реЗрд╡рд╛ рдЧрд░реНрджрдЫред

рдирд┐рдореНрди рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░рд╣рд░реВ рд╕реНрд╡реАрдХрд╛рд░ рдЧрд░реНрди рд╕рдХреНрдЫ: JSON рдврд╛рдБрдЪрд╛рдорд╛ рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди рдлрд╛рдЗрд▓, рд╕рд░реНрднрд░рдорд╛ рд╕реНрдЯреНрд░рд┐рдЩрдХреЛ рд░реВрдкрдорд╛ рдкрдард╛рдЗрдиреЗ рдбреЗрдЯрд╛, рдкреЗрд▓реЛрдбрдорд╛ рдкрдард╛рдЗрдиреЗ рдлрд╛рдЗрд▓рдХреЛ рдорд╛рд░реНрдЧ, рдиреЛрдб рд╢реЗрдбреНрдпреВрд▓рд░ рдЗрдореБрд▓реЗрд╢рди рдлреНрд▓реНрдпрд╛рдЧ, рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рдорд╛рдирдХреЛ рд░реВрдкрдорд╛ рд╕реНрдерд╛рдирд╛рдиреНрддрд░рдг рдЧрд░рд┐рдПрдХреЛ рдбреЗрдЯрд╛рдХреЛ рдкреНрд░рдХрд╛рд░ред

  • рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрджреИ
    st := types.ParseConfig(*config)
  • рдпрджрд┐ рдЗрдореБ рдЭрдгреНрдбрд╛ рдкрд╛рд╕ рднрдпреЛ рднрдиреЗ, рдпреЛ рд╕реБрд░реБ рд╣реБрдиреНрдЫ рд╢реЗрдбреНрдпреБрд▓рд░
  • рдпрджрд┐ f рдлреНрд▓реНрдпрд╛рдЧрд▓реЗ рдлрд╛рдЗрд▓рдорд╛ рдорд╛рд░реНрдЧ рджреЗрдЦрд╛рдЙрдБрдЫ рднрдиреЗ, рддреНрдпрд╕рдкрдЫрд┐ рд╣рд╛рдореА рдпрд╕рдХреЛ рдбрд╛рдЯрд╛ рд▓реЛрдб рдЧрд░реНрдЫреМрдВ fdb рд░ рд╕рд╛рдордЧреНрд░реА рд╕рд░реНрднрд░рдорд╛ рдкрдард╛рдЗрдиреНрдЫ
    client.TCPConnect(st, []byte(CMD_BUFFER_LENGTH + ":" + strconv.Itoa(*t) + "/" + strconv.Itoa(fdblen)), fdb)
  • рдпрджрд┐ рдлрд╛рдЗрд▓ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЧрд░рд┐рдПрдХреЛ рдЫреИрди рднрдиреЗ, рдЭрдгреНрдбрд╛рдмрд╛рдЯ рдбрд╛рдЯрд╛ рдорд╛рддреНрд░ рдкрдард╛рдЗрдиреНрдЫ -d:
    client.TCPConnect(st, []byte(*data), nil)

рдпреЛ рд╕рдмреИ рдкреНрд░реЛрдЯреЛрдХрд▓ рдХреЛ рд╕рдВрд░рдЪрдирд╛ рджреЗрдЦрд╛рдЙрдиреЗ рдПрдХ рд╕рд░рд▓ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рд╣реЛред рд╡рд┐рдХрд╛рд╕рдХреЛ рдХреНрд░рдордорд╛, рдЖрд╡рд╢реНрдпрдХ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдпрд╕рдХреЛ рд╕рдВрд░рдЪрдирд╛рдорд╛ рдердкрд┐рдПрдХреЛ рдЫред

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

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

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдердкреНрди