рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдЕрдкрдирд╛ рд╕рдВрджреЗрд╢рд╡рд╛рд╣рдХ рд▓рд┐рдЦрд╛ рдерд╛

рдПрдХ рд╢рд╛рдо, рдПрдХ рдФрд░ рдирд┐рд░рд╛рд╢рд╛рдЬрдирдХ рджрд┐рди рдХреЗ рдмрд╛рдж, рдЦреЗрд▓ рдХреЛ рд╕рдВрддреБрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рдкреНрд░рдпрд╛рд╕реЛрдВ рд╕реЗ рднрд░рд╛, рдореИрдВрдиреЗ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдХрд┐ рдореБрдЭреЗ рддрддреНрдХрд╛рд▓ рдЖрд░рд╛рдо рдХреА рдЬрд░реВрд░рдд рд╣реИред рдореИрдВ рдХрд┐рд╕реА рдЕрдиреНрдп рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░реВрдВрдЧрд╛, рдЗрд╕реЗ рдЬрд▓реНрджреА рд╕реЗ рдХрд░реВрдВрдЧрд╛, рдЦреЗрд▓ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЗ рджреМрд░рд╛рди рд▓реБрдврд╝рдХрд╛ рд╣реБрдЖ рдЖрддреНрдорд╕рдореНрдорд╛рди рд▓реМрдЯрд╛рдКрдВрдЧрд╛ рдФрд░ рдирдП рдЬреЛрд╢ рдХреЗ рд╕рд╛рде рдЦреЗрд▓ рдХреЛ рддреВрдлрд╛рди рдореЗрдВ рд▓реЗ рдЬрд╛рдКрдВрдЧрд╛! рдореБрдЦреНрдп рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдПрдХ рдЕрдЪреНрдЫрд╛ рдФрд░ рдЖрд░рд╛рдорджрд╛рдпрдХ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЪреБрдирдирд╛ рд╣реИ ... рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рджреВрдд рд▓рд┐рдЦреЗрдВ? рд╣рд╛! рдпрд╣ рдХрд┐рддрдирд╛ рд╕рдЦреНрдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ?

рдпрд╣рд╛рдВ рдХреЛрдб рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред


рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдкреГрд╖реНрдарднреВрдорд┐


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

рдЕрдиреБрд╕реВрдЪрд┐рдд рдХрд╛рд░реНрдпрд╢реАрд▓рддрд╛


  • рдирд┐рдЬреА рдФрд░ рд╕рдореВрд╣ рдЪреИрдЯ
  • рдкрд╛рда, рдЪрд┐рддреНрд░ рдФрд░ рд╡реАрдбрд┐рдпреЛ рднреЗрдЬрдирд╛
  • рдСрдбрд┐рдпреЛ рдФрд░ рд╡реАрдбрд┐рдпреЛ рдХреЙрд▓
  • рдкреНрд░рд╛рдкреНрддрд┐ рдФрд░ рд╡рд╛рдЪрди рдХреА рдкреБрд╖реНрдЯрд┐ (рд╡рд╛рдЯреНрд╕рдПрдк рд╕реЗ рдЯрд┐рдХ)
  • "рдкреНрд░рд┐рдВрдЯ ..."
  • рд╕реВрдЪрдирд╛рдПрдВ
  • QR рдХреЛрдб рдФрд░ рдЬрд┐рдпреЛрд▓реЛрдХреЗрд╢рди рджреНрд╡рд╛рд░рд╛ рдЦреЛрдЬреЗрдВ

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



рднрд╛рд╖рд╛ рдЪрдпрди


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

рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░


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

рдЕрдВрддрд┐рдо рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддреА рд╣реИ


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

рдиреАрдЪреЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдШрдЯрдХреЛрдВ рдХрд╛ рд╡рд┐рд╕реНрддреГрдд рд╡рд┐рд╡рд░рдг рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рд▓рд▓рд╛рдЯ рд╕рд░реНрд╡рд░


рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рдореИрдВрдиреЗ рдЧреЗрдо рдмрдирд╛рдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛, рдореИрдВ рдПрдХ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╕рд┐рдВрдЧрд▓-рдереНрд░реЗрдбреЗрдб рд╕рд░реНрд╡рд░ рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рдкрд░ рдореЛрд╣рд┐рдд рд╣реЛ рдЧрдпрд╛ред рдкреНрд░рднрд╛рд╡реА рд░реВрдк рд╕реЗ рдФрд░ рд╕рдВрднрд╛рд╡рд┐рдд рджреМрдбрд╝ рдХреЗ рдмрд┐рдирд╛ - рдЖрдк рдФрд░ рдХреНрдпрд╛ рдкреВрдЫ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреЗ рд╕рд░реНрд╡рд░реЛрдВ рдХреА рд╡реНрдпрд╡рд╕реНрдерд╛ рдХреИрд╕реЗ рдХреА рдЬрд╛рддреА рд╣реИ, рдореИрдВрдиреЗ asyncioрдЕрдЬрдЧрд░ рднрд╛рд╖рд╛ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рддрд▓реНрд▓реАрди рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ ред рдореИрдВрдиреЗ рдЬреЛ рд╕рдорд╛рдзрд╛рди рджреЗрдЦрд╛ рд╡рд╣ рдмрд╣реБрдд рд╣реА рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рд▓рдЧ рд░рд╣рд╛ рдерд╛ред рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдЫрджреНрдо рдХреЛрдб рд╕рдорд╛рдзрд╛рди рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИред
//  ,      ,    
//       .      socket.Receive
//     , :
var bytesReceived = Completer<object>();
selector.Register(
    socket,
    SocketEvent.Receive,
    () => bytesReceived.Complete(null)
);

await bytesReceived.Future;

int n = socket.Receive(...); //   

// selector -     poll.   
//        (Receive 
//  ), ,    ,  .
//   completer,      ,
//        , ,     .
//     ,       .

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

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

рдлреНрд░рдВрдЯреЗрдВрдб рд╕рд░реНрд╡рд░ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реЗ рд╕рдВрджреЗрд╢ рдкрдврд╝рддрд╛ рд╣реИ рдФрд░, рд╕рдВрджреЗрд╢ рдХреЛрдб рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдЗрд╕реЗ рдХрдлрдХрд╛ рдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдПрдХ рд╡рд┐рд╖рдп рдкрд░ рднреЗрдЬрддрд╛ рд╣реИред

рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдЫреЛрдЯрд╛ рдлреБрдЯрдиреЛрдЯ рдЬреЛ рдХрд╛рдлрд╛ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рдирд╣реАрдВ рд╣реИрдВ
, RabbitMQ. . , ( authentication backend authentication, ). ? - , (partition). , . , , . , ( , , , (headers)).

? ? . (consumer) ( consumer'), ( ) . , , , 2 , . 3 тАФ 2. .

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

рд╕рдмрд╕реЗ рдЖрдо рдорд╛рдорд▓реЗ рдореЗрдВ, рдПрдХ рдЕрдиреБрд░реЛрдз-рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдЪрдХреНрд░ рд╣реЛрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкрдВрдЬреАрдХрд░рдг рдЕрдиреБрд░реЛрдз рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдЧреНрд░рд╛рд╣рдХ рдХреЛ рдХреЗрд╡рд▓ рдПрдХ рдЙрддреНрддрд░ рджреЗрдирд╛ рд╣реЛрдЧрд╛ ( Success,EmailAlreadyInUse, рдЖрджрд┐)ред рд▓реЗрдХрд┐рди рдирдП рд╕рджрд╕реНрдпреЛрдВ (рд╡рд╛рд╕реНрдпрд╛, рдПрдорд┐рд▓ рдФрд░ рдЬреВрд▓рд┐рдпрд╛) рдХреЗ рдореМрдЬреВрджрд╛ рдЪреИрдЯ рдХреЗ рдирд┐рдордВрддреНрд░рдг рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдВрджреЗрд╢ рдореЗрдВ, рд╣рдореЗрдВ рддреАрди рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рдВрджреЗрд╢реЛрдВ рдХреЗ рд╕рд╛рде рддреБрд░рдВрдд рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджреЗрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдкрд╣рд▓рд╛ рдкреНрд░рдХрд╛рд░ - рдЖрдкрдХреЛ рдСрдкрд░реЗрд╢рди рдХреЗ рдкрд░рд┐рдгрд╛рдо (рдЕрдЪрд╛рдирдХ рдПрдХ рд╕рд░реНрд╡рд░ рддреНрд░реБрдЯрд┐ рд╣реБрдИ) рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд┐рдордВрддреНрд░рдгрдХрд░реНрддрд╛ рдХреЛ рд╕реВрдЪрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рджреВрд╕рд░рд╛ рдкреНрд░рдХрд╛рд░ - рдЖрдкрдХреЛ рдЪреИрдЯ рдХреЗ рд╕рднреА рд╡рд░реНрддрдорд╛рди рд╕рджрд╕реНрдпреЛрдВ рдХреЛ рд╕реВрдЪрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдЪреИрдЯ рдореЗрдВ рдЕрдм рдРрд╕реЗ рдФрд░ рдРрд╕реЗ рдирдП рд╕рджрд╕реНрдп рд╣реИрдВред рддреАрд╕рд░рд╛ рд╣реИ рд╡рд╛рд╕рд┐рдпрд╛, рдПрдорд┐рд▓ рдФрд░ рдпреВрд▓рд┐рдпрд╛ рдХреЛ рдирд┐рдордВрддреНрд░рдг рднреЗрдЬрдирд╛ред

рдареАрдХ рд╣реИ, рдпрд╣ рдмрд╣реБрдд рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рдХрд┐рд╕реА рднреА рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП: 1) рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдпрд╣ рдХреНрд▓рд╛рдЗрдВрдЯ рдХрд┐рд╕ рд╕рд░реНрд╡рд░ рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реИ (рд╣рдо рдпрд╣ рдирд╣реАрдВ рдЪреБрдирддреЗ рд╣реИрдВ рдХрд┐ рдЧреНрд░рд╛рд╣рдХ рдХрд┐рд╕ рд╕рд░реНрд╡рд░ рд╕реЗ рдХрдиреЗрдХреНрдЯ рд╣реЛрдЧрд╛, рдмреИрд▓реЗрдВрд╕рд░ рд╣рдорд╛рд░реЗ рдмрд╛рд░реЗ рдореЗрдВ рдлреИрд╕рд▓рд╛ рдХрд░рддрд╛ рд╣реИ); 2) рдмреИрдХрдПрдВрдб рд╕рд░реНрд╡рд░ рд╕реЗ рд╡рд╛рдВрдЫрд┐рдд рдлреНрд░рдВрдЯреЗрдВрдб рд╕рд░реНрд╡рд░ рдкрд░ рдПрдХ рд╕рдВрджреЗрд╢ рднреЗрдЬреЗрдВ; 3) рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЧреНрд░рд╛рд╣рдХ рдХреЛ рдПрдХ рд╕рдВрджреЗрд╢ рднреЗрдЬреЗрдВред

рдЕрдВрдХ 1 рдФрд░ 2 рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдПрдХ рдЕрд▓рдЧ рд╡рд┐рд╖рдп ("рдлреНрд░рдВрдЯреЗрдВрдб рд╕рд░реНрд╡рд░" рд╡рд┐рд╖рдп) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ред рд╡рд┐рднрд╛рдЬрди рдореЗрдВ рдкреНрд░рдорд╛рдгреАрдХрд░рдг, рд╕рддреНрд░ рдФрд░ рдХреЙрд▓ рд╡рд┐рд╖рдпреЛрдВ рдХрд╛ рдкреГрдердХреНрдХрд░рдг рдПрдХ рд╕рдордХрд╛рд▓рди рддрдВрддреНрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИред рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рд╕рддреНрд░ рд╕рд░реНрд╡рд░ рднрд╛рд░реА рднрд░рд╛ рд╣реБрдЖ рд╣реИ? рд╣рдо рд╕рд┐рд░реНрдл рдирдП рд╡рд┐рднрд╛рдЬрди рдФрд░ рд╕рддреНрд░ рд╕рд░реНрд╡рд░реЛрдВ рдХреЗ рдПрдХ рдЬреЛрдбрд╝реЗ рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рдФрд░ рдХрдлрдХрд╛ рдореМрдЬреВрджрд╛ рд╕рддреНрд░ рд╕рд░реНрд╡рд░реЛрдВ рдХреЛ рдЕрдирд▓реЛрдб рдХрд░рддреЗ рд╣реБрдП, рд╣рдорд╛рд░реЗ рд▓рд┐рдП рд▓реЛрдб рдХреЛ рдлрд┐рд░ рд╕реЗ рд╡рд┐рддрд░рд┐рдд рдХрд░реЗрдЧрд╛ред рд╡рд┐рднрд╛рдЬрди рдореЗрдВ "рдлреНрд░рдВрдЯреЗрдВрдб рд╕рд░реНрд╡рд░" рд╡рд┐рд╖рдп рдХрд╛ рдкреГрдердХреНрдХрд░рдг рдПрдХ рд░реВрдЯрд┐рдВрдЧ рддрдВрддреНрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ ред

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

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

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

* рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рд╡рд░реНрдгрд┐рдд рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдереЛрдбрд╝реА рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реИред рдЖрдк рдЗрд╕реЗ рд╕реНрд░реЛрдд рдХреЛрдб рдореЗрдВ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред

рдлреНрд░рдВрдЯреЗрдВрдб рд╕рд░реНрд╡рд░ рдЫрджреНрдо рдХреЛрдб


// Frontend Server 6
while (true) {
    // Consume from "Frontend Servers" topic, partition 6
    var messageToClient = consumer.Consume();
    if (message != null) {
        relayMessageToClient(messageToClient);
    }

    var callbacks = selector.Poll();
    while (callbacks.TryDequeue(out callback)) {
        callback();
    }

    long now = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
    while (!callAtQueue.IsEmpty && callAtQueue.PeekPriority() <= now) {
        callAtQueue.Dequeue()();
    }

    while (messagesToRelayToBackendServers.TryDequeue(out messageFromClient)) {
        // choose topic
        producer.Produce(topic, messageFromClient);
    }
}


рдпрд╣рд╛рдВ рдХреБрдЫ рдЯреНрд░рд┐рдХреНрд╕ рд╣реИрдВред
1) relayMessageToClientред рдпрд╣ рдХреЗрд╡рд▓ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдЗрдЪреНрдЫрд┐рдд рд╕реЙрдХреЗрдЯ рдХреЛ рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЧрд▓рддреА рд╣реЛрдЧреА рдФрд░ рддреБрд░рдВрдд рдЗрд╕реЗ рдПрдХ рд╕рдВрджреЗрд╢ рднреЗрдЬрдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╢рд╛рдпрдж рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рдХреБрдЫ рдЕрдиреНрдп рд╕рдВрджреЗрд╢ рднреЗрдЬ рд░рд╣реЗ рд╣реИрдВ ред рдпрджрд┐ рд╣рдо рд╕реЙрдХреЗрдЯреНрд╕ рдХреА рдЬрд╛рдБрдЪ рдХреЗ рдмрд┐рдирд╛ рдмрд╛рдЗрдЯреНрд╕ рднреЗрдЬрдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ рдпрджрд┐ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╡реНрдпрд╕реНрдд рд╣реИ, рддреЛ рд╕рдВрджреЗрд╢ рдорд┐рд╢реНрд░рд┐рдд рд╣реЛрдВрдЧреЗред рдЬреИрд╕рд╛ рдХрд┐ рдХрдИ рдЕрдиреНрдп рд╕реНрдерд╛рдиреЛрдВ рдкрд░ рд╣реЛрддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рдХреНрд░рдорд┐рдХ рдбреЗрдЯрд╛ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЯреНрд░рд┐рдХ рдПрдХ рдХрддрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ, рдЕрд░реНрдерд╛рдд, рдХрдореНрдкреЗрдпрд░реНрд╕ рдХреА рдПрдХ рдХрддрд╛рд░ ( TaskCompletionSourceC # рдореЗрдВ)ред
void async relayMessageToClient(message) {
    // find client
    await client.ReadyToSend();
    await sendMessage(client, message);
    client.CompleteSend();
}

class Client {
    // ...
    sendMessageQueue = new LinkedList<Completer<object>>();

    async Future ReadyToSend() {
        var sendMessage = Completer<object>();
	if (sendMessageQueue.IsEmpty) {
	    sendMessageQueue.AddLast(sendMessage);
	} else {
	    var prevSendMessage = sendMessageQueue.Last;
	    sendMessageQueue.AddLast(sendMessage);
	    await prevSendMessage.Future;
	}
    }

    void CompleteSend() {
        var sendMessage = sendMessageQueue.RemoveFirst();
	sendMessage.Complete(null);
    }
}

рдпрджрд┐ рдХрддрд╛рд░ рдЦрд╛рд▓реА рдирд╣реАрдВ рд╣реИ, рддреЛ рдлрд┐рд▓рд╣рд╛рд▓ рд╕реЙрдХреЗрдЯ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрдмреНрдЬрд╛ рдХрд░ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдПрдХ рдирдпрд╛ рдмрдирд╛ completerрд╣реИ, рдпрд╣ рдХрддрд╛рд░ рдФрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЛрдбрд╝ рдкрд┐рдЫрд▓реЗ рдПрдХ ред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЬрдм рдкрд┐рдЫрд▓рд╛ рд╕рдВрджреЗрд╢ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдкреВрд░рд╛ рд╣реЛ рдЬрд╛рдПрдЧрд╛ , рдЬрд┐рд╕рд╕реЗ рд╕рд░реНрд╡рд░ рдХреЛ рдЕрдЧрд▓рд╛ рд╕рдВрджреЗрд╢ рднреЗрдЬрдирд╛ рд╢реБрд░реВ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рдЗрд╕ рддрд░рд╣ рдХреА рдХрддрд╛рд░ рдЕрдкрд╡рд╛рджреЛрдВ рдХреЛ рд╕реБрдЪрд╛рд░реВ рд░реВрдк рд╕реЗ рдлреИрд▓рд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИред рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдХрд┐рд╕реА рдЧреНрд░рд╛рд╣рдХ рдХреЛ рд╕рдВрджреЗрд╢ рднреЗрдЬрддреЗ рд╕рдордп рдХреЛрдИ рддреНрд░реБрдЯрд┐ рд╣реБрдИ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдореЗрдВ рди рдХреЗрд╡рд▓ рдЗрд╕ рд╕рдВрджреЗрд╢ рдХреЛ рднреЗрдЬрдиреЗ рдХреЗ рдЕрдкрд╡рд╛рдж рдХреЗ рд╕рд╛рде рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рдЙрди рд╕рднреА рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рднреА рдЬреЛ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдХрддрд╛рд░ рдореЗрдВ рдЗрдВрддрдЬрд╛рд░ рдХрд░ рд░рд╣реЗ рд╣реИрдВ ( 'рдЖрд╣' рдкрд░ рд▓рдЯрдХрд╛рдПрдВ)ред рдпрджрд┐ рд╣рдо рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╡реЗ рд▓рдЯрдХрд╛рдП рд░рд╣реЗрдВрдЧреЗ, рдФрд░ рд╣рдо рдПрдХ рдореЗрдореЛрд░реА рд▓реАрдХ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВрдЧреЗред рд╕рдВрдХреНрд╖рд┐рдкреНрддрддрд╛ рдХреЗ рд▓рд┐рдП, рдРрд╕рд╛ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдХреЛрдб рдпрд╣рд╛рдВ рдирд╣реАрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред 2)await completerCompleteSendcompleterawait

selector.Pollред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рдПрдХ рдЯреНрд░рд┐рдХ рднреА рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рд┐рд░реНрдл рд╡рд┐рдзрд┐ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рдЦрд╛рдорд┐рдпреЛрдВ рдХреЛ рджреВрд░ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдкреНрд░рдпрд╛рд╕ рд╣реИ Socket.Select( selector- рдЗрд╕ рдкрджреНрдзрддрд┐ рдкрд░ рд╕рд┐рд░реНрдл рдПрдХ рдЖрд╡рд░рдг)ред рд╣реБрдб рдХреЗ рддрд╣рдд рдУрдПрд╕ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдпрд╣ рд╡рд┐рдзрд┐ selectрдпрд╛ рддреЛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИ рдпрд╛ pollред рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИред рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд┐рдзрд┐ рдЙрди рд╕реВрдЪрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреА рд╣реИ рдЬреЛ рд╣рдо рдЗрд╕реЗ рдЗрдирдкреБрдЯ (рдкрдврд╝рдиреЗ, рд▓рд┐рдЦрдиреЗ, рддреНрд░реБрдЯрд┐ рдХреА рдЬрд╛рдБрдЪ рдХреЗ рд▓рд┐рдП рд╕реЙрдХреЗрдЯ рдХреА рд╕реВрдЪреА) рдХреЛ рдЦрд┐рд▓рд╛рддреЗ рд╣реИрдВред рдпрд╣ рд╡рд┐рдзрд┐ рд╕реВрдЪрд┐рдпреЛрдВ рдХреЛ рд▓реЗрддреА рд╣реИ, рд╕реЙрдХреЗрдЯреНрд╕ рдХреЛ рдкреЛрд▓ рдХрд░рддреА рд╣реИ рдФрд░ рд╕реВрдЪрд┐рдпреЛрдВ рдореЗрдВ рдХреЗрд╡рд▓ рдЙрди рд╕реЙрдХреЗрдЯреНрд╕ рдХреЛ рдЫреЛрдбрд╝ рджреЗрддреА рд╣реИ рдЬреЛ рдЖрд╡рд╢реНрдпрдХ рдСрдкрд░реЗрд╢рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИрдВред рдЕрдиреНрдп рд╕рднреА рд╕реЙрдХреЗрдЯ рдХреЛ рд╕реВрдЪрд┐рдпреЛрдВ рд╕реЗ рдлреЗрдВрдХ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред "рдХрд┐рдХрд┐рдВрдЧ" рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣реЛрддрд╛ рд╣реИRemoveAt(рдЕрд░реНрдерд╛рдд, рдмрд╛рдж рдХреЗ рд╕рднреА рддрддреНрд╡реЛрдВ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬреЛ рдЕрдХреНрд╖рдо рд╣реИ)ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЪреВрдВрдХрд┐ рд╣рдореЗрдВ рдЪрдХреНрд░ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреЛ рд╕рднреА рдкрдВрдЬреАрдХреГрдд рд╕реЙрдХреЗрдЯреНрд╕ рдХреЛ рдЪреБрдирдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП "рдХреНрд▓реАрдВрдЬрд┐рдВрдЧ" рдЖрдо рддреМрд░ рдкрд░ рд╣рд╛рдирд┐рдХрд╛рд░рдХ рд╣реИ, рд╣рдореЗрдВ рд╣рд░ рдмрд╛рд░ рд╕реВрдЪреА рдХреЛ рдлрд┐рд░ рд╕реЗ рднрд░рдирд╛ рд╣реЛрдЧрд╛ред рд╣рдо рдХрд╕реНрдЯрдо рдПрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрди рд╕рднреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ List, RemoveAtрдЬрд┐рдирдХреА рд╡рд┐рдзрд┐ рд╕реВрдЪреА рд╕реЗ рдЖрдЗрдЯрдо рдХреЛ рдирд╣реАрдВ рд╣рдЯрд╛рддреА рд╣реИ, рд▓реЗрдХрд┐рди рдмрд╕ рдЗрд╕реЗ рд╣рдЯрд╛рдП рдЧрдП рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рддреА рд╣реИред рд╡рд░реНрдЧ ListForPollingрдореЗрд░реА рдРрд╕реА рд╕реВрдЪреА рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИред ListForPollingрдХреЗрд╡рд▓ рд╡рд┐рдзрд┐ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ Socket.SelectрдФрд░ рдХрд┐рд╕реА рдФрд░ рдЪреАрдЬ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рдирд╣реАрдВ рд╣реИред

3)callAtQueueред рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдлреНрд░рдВрдЯрдПрдВрдб рд╕рд░реНрд╡рд░, рдмреИрдХрдПрдВрдб рд╕рд░реНрд╡рд░ рдкрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕рдВрджреЗрд╢ рднреЗрдЬрддреЗ рд╣реБрдП, рдПрдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ (рдЗрд╕ рдмрд╛рдд рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдСрдкрд░реЗрд╢рди рд╕рдлрд▓ рд░рд╣рд╛ рдерд╛, рдпрд╛ рдХреБрдЫ рдЧрд▓рдд рд╣реБрдЖ рддреЛ рддреНрд░реБрдЯрд┐)ред рдпрджрд┐ рд╡рд╣ рд╕рдордп рдХреА рдПрдХ рд╡рд┐рдиреНрдпрд╛рд╕ рдЕрд╡рдзрд┐ рдХреЗ рднреАрддрд░ рдЙрддреНрддрд░ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рддреЛ рд╡рд╣ рдЧреНрд░рд╛рд╣рдХ рдХреЛ рдПрдХ рддреНрд░реБрдЯрд┐ рднреЗрдЬрддрд╛ рд╣реИ рддрд╛рдХрд┐ рд╡рд╣ рдЙрд╕ рдЙрддреНрддрд░ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рди рдХрд░реЗ рдЬреЛ рдХрднреА рдирд╣реАрдВ рдЖрдПрдЧрд╛ред callAtQueueрдПрдХ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рд╣реИред рд╕рд░реНрд╡рд░ рджреНрд╡рд╛рд░рд╛ рдХрд╛рдлреНрдХрд╛ рдХреЛ рд╕рдВрджреЗрд╢ рднреЗрдЬреЗ рдЬрд╛рдиреЗ рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж, рдпрд╣ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рдХрд░рддрд╛ рд╣реИ:
long now = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
callAtQueue.Enqueue(callback, now + config.WaitForReplyMSec);

рдХреЙрд▓рдмреИрдХ рдореЗрдВ, рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдирд╛ рд░рджреНрдж рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд╕рд░реНрд╡рд░ рддреНрд░реБрдЯрд┐ рднреЗрдЬрдирд╛ рд╢реБрд░реВ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдпрджрд┐ рдмреИрдХрдПрдВрдб рд╕рд░реНрд╡рд░ рд╕реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдорд┐рд▓рддреА рд╣реИ, рддреЛ рдХреЙрд▓рдмреИрдХ рдХреБрдЫ рднреА рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХрд╛

рдЙрдкрдпреЛрдЧ await Task.WhenAny(answerReceivedTask, Task.Delay(x))рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдХреЛрдб рдХреЗ рдмрд╛рдж рдЗрд╕реЗ Task.DelayрдкреВрд▓ рд╕реЗ рдереНрд░реЗрдб рдкрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

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

* рдПрдХ рд▓реЗрдЦ рд▓рд┐рдЦрддреЗ рд╕рдордп, рдореБрдЭреЗ рдЕрдЪрд╛рдирдХ рдПрд╣рд╕рд╛рд╕ рд╣реБрдЖ рдХрд┐ рд╣рдо deliveryHandlerрдЗрд╕ рдкрджреНрдзрддрд┐ рдХреЛ рдкрд╛рд░рд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ Produceрдпрд╛ рдмрд╕ рд╕рднреА рдХрд╛рдлрд╝реНрдХрд╛ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рддреНрд░реБрдЯрд┐ рдЕрднреА рднреА рдЧреНрд░рд╛рд╣рдХ рдХреЛ рдЙрд╕ рд╕рдордп-рдЖрдЙрдЯ рджреНрд╡рд╛рд░рд╛ рднреЗрдЬреА рдЬрд╛рдПрдЧреА рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдерд╛) - рдлрд┐рд░ рд╣рдорд╛рд░рд╛ рд╕рднреА рдХреЛрдб рдПрдХрд▓-рдереНрд░реЗрдбреЗрдб рд╣реЛрдЧрд╛ред рдЕрдм рдореИрдВ рд╕реЛрдЪ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдЗрд╕реЗ рдФрд░ рдмреЗрд╣рддрд░ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдПред

рдХреНрдпреЛрдВ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдХрд╛рдлреНрдХрд╛, рдЦрд░рдЧреЛрд╢ рдирд╣реАрдВ?
, , , , , RabbitMQ? . , , . ? , frontend . , backend , , . , , . , error-prone. , basicGet , , , . . basicGet, , . .


рдмреИрдХрдПрдВрдб рд╕рд░реНрд╡рд░


рдлреНрд░рдВрдЯреЗрдВрдб рд╕рд░реНрд╡рд░ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ, рдпрд╣рд╛рдВ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рдХреЛрдИ рджрд┐рд▓рдЪрд╕реНрдк рдмрд┐рдВрджреБ рдирд╣реАрдВ рд╣реИрдВред рд╕рднреА рдмреИрдХреЗрдВрдб рд╕рд░реНрд╡рд░ рдЙрд╕реА рддрд░рд╣ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдкрд░, рд╕рд░реНрд╡рд░ рд╡рд┐рд╖рдп (рднреВрдорд┐рдХрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдкреНрд░рдорд╛рдгреАрдХрд░рдг, рд╕рддреНрд░ рдпрд╛ рдХреЙрд▓) рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрддрд╛ рд╣реИ, рдФрд░ рдХрд╛рдлреНрдХрд╛ рдЗрд╕реЗ рдПрдХ рдпрд╛ рдЕрдзрд┐рдХ рд╡рд┐рднрд╛рдЬрди рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рд╕рд░реНрд╡рд░ рдХрд╛рдлреНрдХрд╛ рд╕реЗ рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ, рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЖрдорддреМрд░ рдкрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдПрдХ рдпрд╛ рдЕрдзрд┐рдХ рд╕рдВрджреЗрд╢ рднреЗрдЬрддрд╛ рд╣реИред рд▓рдЧрднрдЧ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХреЛрдб:
void Run() {
    long lastCommitTime = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();

    while (true) {
        var consumeResult = consumer.Consume(
            TimeSpan.FromMilliseconds(config.Consumer.PollTimeoutMSec)
        );

        if (consumeResult != null) {
            var workUnit = new WorkUnit() {
                ConsumeResult = consumeResult,
            };

            LinkedList<WorkUnit> workUnits;
            if (partitionToWorkUnits.ContainsKey(consumeResult.Partition)) {
                workUnits = partitionToWorkUnits[consumeResult.Partition];
            } else {
                workUnits = partitionToWorkUnits[consumeResult.Partition] =
                    new LinkedList<WorkUnit>();
            }

            workUnits.AddLast(workUnit);

            handleWorkUnit(workUnit);
        }

	if (
            DateTimeOffset.UtcNow.ToUnixTimeMilliseconds() - lastCommitTime >=
            config.Consumer.CommitIntervalMSec
        ) {
            commitOffsets();
	    lastCommitTime = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
	}
    }
}

рдХрд┐рд╕ рддрд░рд╣ рдХреЗ рдСрдлрд╝рд╕реЗрдЯ рдХрд░рдиреЗ рд╣реИрдВ?
. тАФ (offset) (0, 1 ). 0. TopicPartitionOffset. (consume) , ConsumeResult, , , TopicPartitionOffset. ?

at least once delivery, , ( ). , (commited) . , consumer 16, , 16 , , , . - consumer' consumer' , 16 + 1 ( + 1). 17 . N , .

рдореИрдВрдиреЗ рдСрдЯреЛ рдХрдорд┐рдЯ рдХрд┐рдпрд╛ рдФрд░ рдЦреБрдж рдХрдорд┐рдЯ рдХрд┐рдпрд╛ред рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ handleWorkUnit, рдЬрд╣рд╛рдВ рд╕рдВрджреЗрд╢ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрд╣ рдПрдХ async voidрд╡рд┐рдзрд┐ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХреЛрдИ рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╕рдВрджреЗрд╢ 5 рд╕рдВрджреЗрд╢ рд╕реЗ рдкрд╣рд▓реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ 6. рдХрдлрд╝реНрдХрд╛ рд╕реНрдЯреЛрд░ рдХреЗрд╡рд▓ рдПрдХ рд╣реА рдСрдлрд╕реЗрдЯ рдСрдлрд╕реЗрдЯ (рдФрд░ рдСрдлрд╕реЗрдЯ рдХрд╛ рдПрдХ рд╕реЗрдЯ), рдХреНрд░рдорд╢рдГ, рдСрдлрд╕реЗрдЯ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗред 6, рд╣рдореЗрдВ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдкрд┐рдЫрд▓реЗ рд╕рднреА рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рднреА рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдПрдХ рдмреИрдХрдПрдВрдб рд╕рд░реНрд╡рд░ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдХрдИ рд╡рд┐рднрд╛рдЬрдиреЛрдВ рд╕реЗ рд╕рдВрджреЗрд╢реЛрдВ рдХрд╛ рдЙрдкрднреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдФрд░, рдЗрд╕рд▓рд┐рдП, рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдпрд╣ рд╕рдВрдмрдВрдзрд┐рдд рд╡рд┐рднрд╛рдЬрди рдХреЗ рд▓рд┐рдП рд╕рд╣реА рдСрдлрд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рд▓рд┐рдП, рд╣рдо рдлреЙрд░реНрдо рд╡рд┐рднрд╛рдЬрди рдХреЗ рдПрдХ рд╣реИрд╢ рдореИрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ: рдХрд╛рд░реНрдп рдЗрдХрд╛рдЗрдпрд╛рдБред рдпрд╣рд╛рдБ рдХреЛрдб рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ commitOffsets(рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХреЛрдб рдЗрд╕ рдмрд╛рд░):
private void commitOffsets() {
    foreach (LinkedList<WorkUnit> workUnits in partitionToWorkUnits.Values) {
        WorkUnit lastFinishedWorkUnit = null;
        LinkedListNode<WorkUnit> workUnit;
        while ((workUnit = workUnits.First) != null && workUnit.Value.IsFinished) {
            lastFinishedWorkUnit = workUnit.Value;
            workUnits.RemoveFirst();
        }

        if (lastFinishedWorkUnit != null) {
            offsets.Add(lastFinishedWorkUnit.ConsumeResult.TopicPartitionOffset);
        }
    }

    if (offsets.Count > 0) {
        consumer.Commit(offsets);
        foreach (var offset in offsets) {
            logger.Debug(
                "{Identifier}: Commited offset {TopicPartitionOffset}",
                identifier,
                offset
            );
        }
        offsets.Clear();
    }
}

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рдо рдЗрдХрд╛рдЗрдпреЛрдВ рдкрд░ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕ рдХреНрд╖рдг рддрдХ рдкреВрд░реА рдХреА рдЧрдИ рдЕрдВрддрд┐рдо рдЗрдХрд╛рдИ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛ рд▓реЗрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рдХреЛрдИ рдЕрдкреВрд░реНрдгрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ , рдФрд░ рдЗрд╕реА рдСрдлрд╕реЗрдЯ рдХреЛ рдкреВрд░рд╛ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рд▓реВрдк рд╣рдореЗрдВ "рдЫрд┐рджреНрд░рдкреВрд░реНрдг" рд╕реЗ рдмрдЪрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╡рд░реНрддрдорд╛рди рдореЗрдВ 4 рдЗрдХрд╛рдЗрдпрд╛рдБ рд╣реИрдВ ( 0: Finished, 1: Not Finished, 2: Finished, 3: Finished), рддреЛ рд╣рдо рдХреЗрд╡рд▓ 0 рд╡реАрдВ рдЗрдХрд╛рдИ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдпрджрд┐ рд╣рдо рддреБрд░рдВрдд 3 рдЬреА рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕рд╕реЗ 1 рдХрд╛ рд╕рдВрднрд╛рд╡рд┐рдд рдиреБрдХрд╕рд╛рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдпрджрд┐ рд╕рд░реНрд╡рд░ рдЕрднреА рдорд░ рдЬрд╛рддрд╛ рд╣реИред
class WorkUnit {
    public ConsumeResult<Null, byte[]> ConsumeResult { get; set; }
    private int finished = 0;

    public bool IsFinished => finished == 1;

    public void Finish() {
        Interlocked.Increment(ref finished);
    }
}


handleWorkUnitрдЬреИрд╕рд╛ рдХрд┐ рдХрд╣рд╛ рдЧрдпрд╛ рдерд╛, async voidрд╡рд┐рдзрд┐, рдФрд░ рдпрд╣, рддрджрдиреБрд╕рд╛рд░, рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрдВрджрд░ рд▓рдкреЗрдЯрд╛ рд╣реБрдЖ рд╣реИ try-catch-finallyред рдореЗрдВ tryрд╡рд╣ рдЖрд╡рд╢реНрдпрдХ рд╕реЗрд╡рд╛ рдХрд╣рддрд╛ рд╣реИ, рдФрд░ рдореЗрдВ finally- workUnit.Finish()ред

рд╕реЗрд╡рд╛рдПрдБ рдмрд╣реБрдд рддреБрдЪреНрдЫ рд╣реИрдВред рдпрд╣рд╛рдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдПрдХ рдирдпрд╛ рд╕рдВрджреЗрд╢ рднреЗрдЬрддрд╛ рд╣реИ, рддреЛ рдХреМрди рд╕рд╛ рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрддрд╛ рд╣реИ:
private async Task<ServiceResult> createShareItem(CreateShareItemMessage msg) {
    byte[] message;
    byte[] messageToPals1 = null;
    int?[] partitions1 = null;

    //  UserId  .
    long? userId = hashService.ValidateSessionIdentifier(msg.SessionIdentifier);
    if (userId != null) {
        var shareItem = new ShareItemModel(
            requestIdentifier: msg.RequestIdentifier,
            roomIdentifier: msg.RoomIdentifier,
            creatorId: userId,
            timeOfCreation: null,
            type: msg.ShareItemType,
            content: msg.Content
        );

        //      null,
        //     .
        long? timeOfCreation = await storageService.CreateShareItem(shareItem);
        if (timeOfCreation != null) {
            //      .
            List<long> pals = await inMemoryStorageService.GetRoomPals(
                msg.RoomIdentifier
            );
            if (pals == null) {
            	//     -       .
                pals = await storageService.GetRoomPals(msg.RoomIdentifier);
                await inMemoryStorageService.SaveRoomPals(msg.RoomIdentifier, pals);
            }

            //    ,  .
            pals.Remove(userId.Value);

            if (pals.Count > 0) {
            	//  ack,  ,    
                //    .
                await storageService.CreateAck(
                    msg.RequestIdentifier, userId.Value, msg.RoomIdentifier,
                    timeOfCreation.Value, pals
                );

                // in -  UserId, out -   frontend ,
                //    .  -   -
                //   null.
                partitions1 = await inMemoryStorageService.GetUserPartitions(pals);

                List<long> onlinePals = getOnlinePals(pals, partitions1);

                //    ,       .
                //         .
                if (onlinePals.Count > 0) {
                    messageToPals1 = converterService.EncodeNewShareItemMessage(
                        userId.Value, timeOfCreation.Value, onlinePals, shareItem
                    );
                    nullRepeatedPartitions(partitions1);
                    // -         
                    // frontend ,    null' .
                }
            }

            message = converterService.EncodeSuccessfulShareItemCreationMessage(
                msg.RequestIdentifier, timeOfCreation.Value
            );
        } else {
            message = converterService.EncodeMessage(
                MessageCode.RoomNotFound, msg.RequestIdentifier
            );
        }
    } else {
        message = converterService.EncodeMessage(
            MessageCode.UserNotFound, msg.RequestIdentifier
        );
    }

    return new ServiceResult(
        message: message, //    .
        messageToPals1: messageToPals1, //  -    .
        partitions1: partitions1
    );
}


рдбреЗрдЯрд╛рдмреЗрд╕


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

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

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

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЬрдм рдореИрдВ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рд╕рдордЭрдиреЗ рдореЗрдВ рдмреЗрд╣рддрд░ рд╣реЛ рдЬрд╛рдКрдВрдЧрд╛ рддреЛ рдЖрдзрд╛рд░ рдмрдбрд╝реЗ рдмрджрд▓рд╛рд╡реЛрдВ рд╕реЗ рдЧреБрдЬрд░реЗрдЧрд╛ред рдЕрднреА, рдЕрдХреНрд╕ рдЯреЗрдмрд▓ рдореБрдЭреЗ рд╕рддрд╛ рд░рд╣рд╛ рд╣реИред рдЗрд╕ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ, рдореИрдВ рдЙрди рдбреЗрдЯрд╛ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реВрдВ рдЬреЛ рдЕрднреА рддрдХ рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рд╣реБрдП рд╣реИрдВ рдФрд░ рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рдЕрднреА рддрдХ рд╕рдВрджреЗрд╢ рдирд╣реАрдВ рдкрдврд╝рд╛ рд╣реИ (рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЪреЗрдХрдорд╛рд░реНрдХ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП)ред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рд╕реВрдЪрд┐рдд рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ рдХрд┐ рдЙрд╕рдХрд╛ рд╕рдВрджреЗрд╢ рдкрдврд╝рд╛ рдЧрдпрд╛ рд╣реИ рдпрджрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдм рдСрдирд▓рд╛рдЗрди рд╣реИ, рд▓реЗрдХрд┐рди рдпрджрд┐ рдирд╣реАрдВ, рддреЛ рд╣рдореЗрдВ рдмрд╛рдж рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рд╕реВрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рд╕рд╣реЗрдЬрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдФрд░ рдЬрдм рд╕реЗ рд╕рдореВрд╣ рдЪреИрдЯ рдЙрдкрд▓рдмреНрдз рд╣реИрдВ, рдпрд╣ рдХреЗрд╡рд▓ рдзреНрд╡рдЬ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИ, рдЖрдкрдХреЛ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдбреЗрдЯрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рддреЛ рдпрд╣рд╛рдВ рд╣рдо рд╕реАрдзреЗ рдмрд┐рдЯ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ (рдПрдХ рдкрдВрдХреНрддрд┐ рдЙрди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рддреЗ рд╣реИрдВ рдЬреЛ рдЕрднреА рддрдХ рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рд╣реБрдП рд╣реИрдВ, рджреВрд╕рд░рд╛ - рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рдЕрднреА рддрдХ рдирд╣реАрдВ рдкрдврд╝реЗ рд╣реИрдВ)ред рдЦрд╛рд╕рдХрд░ рдХреЛрдХрд░реЛрдЪ рдХрд╛ рд╕рдорд░реНрдерди bitрдФрд░bit varyingред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореБрдЭреЗ рдХрднреА рдирд╣реАрдВ рд▓рдЧрд╛ рдХрд┐ рдЗрд╕ рд╡реНрдпрд╡рд╕рд╛рдп рдХреЛ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдП, рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рдХрдорд░реЛрдВ рдХреА рд╕рдВрд░рдЪрдирд╛ рд▓рдЧрд╛рддрд╛рд░ рдмрджрд▓ рд╕рдХрддреА рд╣реИред рдЕрдкрдиреЗ рдЕрд░реНрде рдХреЛ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд┐рдЯ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЗ рд▓рд┐рдП, рдХрдорд░реЗ рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЙрд╕реА рдХреНрд░рдо рдореЗрдВ рд░рд╣рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬреЛ рдХрд░рдирд╛ рдХрд╛рдлреА рдореБрд╢реНрдХрд┐рд▓ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреБрдЫ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрдорд░реЗ рдХреЛ рдЫреЛрдбрд╝ рджреЗрддреЗ рд╣реИрдВред рдпрд╣рд╛рдВ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВред рд╢рд╛рдпрдж рдпрд╣ рд▓рд┐рдЦрдиреЗ рд▓рд╛рдпрдХ рд╣реИ - рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ jsonb рдлрд╝реАрд▓реНрдб рд╕реЗ рд╣рдЯрд╛рдиреЗ рдХреЗ рдмрдЬрд╛рдп -1 рддрд╛рдХрд┐ рдСрд░реНрдбрд░ рд╕рдВрд░рдХреНрд╖рд┐рдд рд╣реИ, рдпрд╛ рдХреБрдЫ рд╕рдВрд╕реНрдХрд░рдг рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИ, рддрд╛рдХрд┐ рд╣рдореЗрдВ рдкрддрд╛ рдЪрд▓реЗ рдХрд┐ рдпрд╣ рдмрд┐рдЯ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рдЖрджреЗрд╢ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рддрдм рдерд╛, рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд╡рд░реНрддрдорд╛рди рдЖрджреЗрд╢ рдкрд░ рдирд╣реАрдВред рдореИрдВ рдЕрднреА рднреА рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рд╣реВрдВ рдХрд┐ рдХреИрд╕реЗ рдЗрд╕ рд╡реНрдпрд╡рд╕рд╛рдп рдХреЛ рдмреЗрд╣рддрд░ рддрд░реАрдХреЗ рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдП, рд▓реЗрдХрд┐рди рдлрд┐рд▓рд╣рд╛рд▓, рдЬрд┐рдиреНрд╣реЗрдВ рдЕрднреА рддрдХ рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдирд╣реАрдВ рдкрдврд╝рд╛ рд╣реИ рд╡реЗ рднреА рд╕рд┐рд░реНрдл jsonb рдлрд╝реАрд▓реНрдб рд╣реИрдВред рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рд╕рдВрджреЗрд╢ рдХреЗ рд╕рд╛рде рдРрдХреНрд╕ рддрд╛рд▓рд┐рдХрд╛ рд▓рд┐рдЦреА рдЧрдИ рд╣реИ, рдбреЗрдЯрд╛ рдХреА рдорд╛рддреНрд░рд╛ рдмрдбрд╝реА рд╣реИредрд╣рд╛рд▓рд╛рдБрдХрд┐, рдЬрдм рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ рдФрд░ рд╕рднреА рджреНрд╡рд╛рд░рд╛ рдкрдврд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд░рд┐рдХреЙрд░реНрдб рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рд╕реНрдкрдВрджрди


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

рд░рд╛рдЬреНрдп рдкреНрд░рдмрдВрдзрди


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

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

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

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

рд╕рдмрд╕реЗ рдХрд╖реНрдЯрджрд╛рдпреА рд╣рд┐рд╕реНрд╕рд╛


рдпрджрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдиреЗ рд╕рдВрджреЗрд╢ рднреЗрдЬрд╛ рд╣реИ, рддреЛ рдореБрдЭреЗ рдХреНрдпрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рднреЗрдЬрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдЗрдВрдЯрд░рдиреЗрдЯ рдХрдиреЗрдХреНрд╢рди рдЦреЛ рдЧрдпрд╛ рдерд╛? рдпрджрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдкрдврд╝рдиреЗ рдХреА рдкреБрд╖реНрдЯрд┐ рдкреНрд░рд╛рдкреНрдд рд╣реЛ, рддреЛ рдореБрдЭреЗ рдХреНрдпрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдЙрд╕рдиреЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд╕рдВрдмрдВрдзрд┐рдд рд░рд┐рдХреЙрд░реНрдб рдЕрдкрдбреЗрдЯ рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЖрд╡реЗрджрди рдХреЛ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рдерд╛? рдпрджрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдиреЗ рдЕрдкрдиреЗ рджреЛрд╕реНрдд рдХреЛ рдХрдорд░реЗ рдореЗрдВ рдЖрдордВрддреНрд░рд┐рдд рдХрд┐рдпрд╛, рддреЛ рдореБрдЭреЗ рдХреНрдпрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдирд┐рдордВрддреНрд░рдг рднреЗрдЬреЗ рдЬрд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдЙрд╕рдХреА рдмреИрдЯрд░реА рдорд░ рдЧрдИ? рдХреНрдпрд╛ рдЖрдкрдиреЗ рдХрднреА рдРрд╕реЗ рд╣реА рд╕рд╡рд╛рд▓ рдкреВрдЫреЗ рд╣реИрдВ? рдореИрдВ рдпрд╣рд╛рдВ рд╣реВрдВред рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗред рд▓реЗрдХрд┐рди рд╡рд┐рдХрд╛рд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реЛрдиреЗ рд▓рдЧрд╛ред рдЪреВрдВрдХрд┐ рдХрдиреЗрдХреНрд╢рди рдХрд┐рд╕реА рднреА рд╕рдордп рдЧрд╛рдпрдм рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдХрд┐рд╕реА рднреА рд╕рдордп рдлреЛрди рдмрдВрдж рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рд░ рдЪреАрдЬ рдХреА рдкреБрд╖реНрдЯрд┐ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП ред рдордЬрд╝рд╛ рдирд╣реАрдВред рдЗрд╕рд▓рд┐рдП, рдХреНрд▓рд╛рдЗрдВрдЯ рджреНрд╡рд╛рд░рд╛ рд╕рд░реНрд╡рд░ рдХреЛ рднреЗрдЬреЗ рдЬрд╛рдиреЗ рд╡рд╛рд▓рд╛ рдкрд╣рд▓рд╛ рд╕рдВрджреЗрд╢ ( Joinрдпрджрд┐ рдЖрдкрдХреЛ рдпрд╛рдж рд╣реИ) рд╕рд┐рд░реНрдл "рд╣реИрд▓реЛ рдЖрдИ рдПрдо рдСрдирд▓рд╛рдЗрди" рдирд╣реАрдВ рд╣реИ , рдпрд╣ рд╣реИ"рдирдорд╕реНрддреЗ, рдореИрдВ рдСрдирд▓рд╛рдЗрди рд╣реВрдВ рдФрд░ рдпрд╣рд╛рдВ рдЕрдкреБрд╖реНрдЯ рдХрдорд░реЗ рд╣реИрдВ, рдпрд╣рд╛рдВ рдЕрдкреБрд╖реНрдЯ рдПрдВрдХ рд╣реИрдВ, рдпрд╣рд╛рдВ рдЕрдкреБрд╖реНрдЯ рдХрдорд░реЗ рдХреА рд╕рджрд╕реНрдпрддрд╛ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рд╣реИрдВ, рдФрд░ рдпрд╣рд╛рдВ рдкреНрд░рддрд┐ рдХрдорд░рд╛ рдЕрдВрддрд┐рдо рдмрд╛рд░ рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рд╣реБрдП рд╣реИрдВ ред " рдФрд░ рд╕рд░реНрд╡рд░ рдПрдХ рд╕рдорд╛рди рдкрддреНрд░рдХ рдХреЗ рд╕рд╛рде рдЙрддреНрддрд░ рджреЗрддрд╛ рд╣реИ: "рдЬрдм рдЖрдк рдСрдлрд╝рд▓рд╛рдЗрди рдереЗ, рддреЛ рдЗрд╕ рддрд░рд╣ рдХреЗ рдФрд░ рдЖрдкрдХреЗ рд╕рдВрджреЗрд╢ рдРрд╕реЗ рдФрд░ рдРрд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рджреНрд╡рд╛рд░рд╛ рдкрдврд╝реЗ рдЬрд╛рддреЗ рдереЗ, рдФрд░ рдЙрдиреНрд╣реЛрдВрдиреЗ рдкреЗрдЯреНрдпрд╛ рдХреЛ рднреА рдЗрд╕ рдХрдорд░реЗ рдореЗрдВ рдЖрдордВрддреНрд░рд┐рдд рдХрд┐рдпрд╛, рдФрд░ рд╕реНрд╡реЗрддрд╛ рдиреЗ рдЗрд╕ рдХрдорд░реЗ рдХреЛ рдЫреЛрдбрд╝ рджрд┐рдпрд╛, рдФрд░ рдЖрдкрдХреЛ рдЗрд╕ рдХрдорд░реЗ рдореЗрдВ рдЖрдордВрддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛, рд▓реЗрдХрд┐рди рдЗрди рджреЛ рдХрдорд░реЛрдВ рдореЗрдВ 40 рдирдП рдкрдж рд╣реИрдВ ред тАЭ рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рдЬрд╛рдирдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдХрд┐ рдЕрдиреНрдп рджреВрддреЛрдВ рдореЗрдВ рдЗрд╕реА рддрд░рд╣ рдХреА рдЪреАрдЬреЗрдВ рдХреИрд╕реЗ рдХреА рдЬрд╛рддреА рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдореЗрд░рд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЕрдиреБрдЧреНрд░рд╣ рд╕реЗ рдирд╣реАрдВ рдЪрдордХрддрд╛ рд╣реИред

рдЗрдореЗрдЬрд┐рд╕


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

ThumbnailGeneratorService
class ThumbnailGeneratorService {
  SendPort _sendPort;
  final Queue<Completer<Uint8List>> _completerQueue =
      Queue<Completer<Uint8List>>();

  ThumbnailGeneratorService() {
    var receivePort = ReceivePort();
    Isolate.spawn(startWorker, receivePort.sendPort);

    receivePort.listen((data) {
      if (data is SendPort) {
        _sendPort = data;
      } else {
        var completer = _completerQueue.removeFirst();
        completer.complete(data);
      }
    });
  }

  static void startWorker(SendPort sendPort) async {
    var receivePort = ReceivePort();
    sendPort.send(receivePort.sendPort);

    receivePort.listen((imageBytes) {
      Image image = decodeImage(imageBytes);
      Image thumbnail = copyResize(image, width: min(image.width, 200));

      sendPort.send(Uint8List.fromList(encodePng(thumbnail)));
    });
  }

  Future<Uint8List> generate(Uint8List imageBytes) {
    var completer = Completer<Uint8List>();
    _completerQueue.add(completer);
    
    _sendPort.send(imageBytes);

    return completer.future;
  }
}


Firebase рдСрд░реНрдХрд┐рдЯреЗрдХреНрдЯ рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ Firebase рд╕реНрдЯреЛрд░реЗрдЬ рддрдХ рдкрд╣реБрдБрдЪ рдХреЗ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЗ рд▓рд┐рдП (рддрд╛рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд┐рд╕реА рдФрд░ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрдлрд╛рдЗрд▓ рдкрд┐рдХреНрдЪрд░ рди рднрд░реЗрдВ, рдХрд╣ рд╕рдХрддрд╛ рд╣реИ )ред рдЕрдиреНрдп рд╕рднреА рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдореЗрд░реЗ рд╕рд░реНрд╡рд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рд╕рдВрджреЗрд╢ рд╕реНрд╡рд░реВрдк


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

рдкрд╣рд▓реЗ 4 рдмрд╛рдЗрдЯреНрд╕ рд╕рдВрджреЗрд╢ рдХреА рд▓рдВрдмрд╛рдИ рд╣реИрдВред
рдЕрдЧрд▓рд╛ рдмрд╛рдЗрдЯ рд╕рдВрджреЗрд╢ рдХреЛрдб рд╣реИред
рдЕрдЧрд▓реЗ 16 рдмрд╛рдЗрдЯреНрд╕ рдЕрдиреБрд░реЛрдз рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ (uuid) рд╣реИрдВред
рдЕрдЧрд▓реЗ 40 рдмрд╛рдЗрдЯреНрд╕ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдЯреЛрдХрди рд╣реИред
рд╢реЗрд╖ рд╕рдВрджреЗрд╢ ред

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

рдореИрд╕реЗрдЬ рдХреЛрдб рдПрдирдо рдХреЗ рд╕рджрд╕реНрдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИMessageCodeред рд░реВрдЯрд┐рдВрдЧ рдХреЛ рдХреЛрдб рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЪреВрдВрдХрд┐ рд╣рдо рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЕрд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХрддрд╛ рдХреЗ рдмрд┐рдирд╛ рд╕рд░рдгреА рд╕реЗ рдХреЛрдб рдирд┐рдХрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ, рдлреНрд░рдВрдЯрдПрдВрдб рд╕рд░реНрд╡рд░ рдпрд╣ рддрдп рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХрд╛рдлреНрдХрд╛ рдХреЗ рдХрд┐рд╕ рд╡рд┐рд╖рдп рдореЗрдВ рдХрд┐рд╕реА рдФрд░ рдХреЛ рдпрд╣ рдЬрд┐рдореНрдореЗрджрд╛рд░реА рд╕реМрдВрдкрдиреЗ рдХреЗ рдмрдЬрд╛рдп рд╕рдВрджреЗрд╢ рднреЗрдЬрд╛ рдЬрд╛рдПред

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

рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдЯреЛрдХрдирдПрдХ UserId (8 рдмрд╛рдЗрдЯреНрд╕) + 32 рдмрд╛рдЗрдЯреНрд╕ HmacSha256 рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рд╣реИред рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпрд╣ Jwt рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд▓рд╛рдпрдХ рд╣реИред Jwt рдХреНрдпрд╛ рдХреЗ рд▓рд┐рдП рд▓рдЧрднрдЧ 7-8 рдЧреБрдирд╛ рдмрдбрд╝рд╛ рд╣реИ? рдореЗрд░реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХрд╛ рдХреЛрдИ рджрд╛рд╡рд╛ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдПрдХ рд╕рд╛рдзрд╛рд░рдг hmac рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдареАрдХ рд╣реИред рдЕрдиреНрдп рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреА рдпреЛрдЬрдирд╛ рдирд╣реАрдВ рд╣реИ рдФрд░ рди рд╣реА рд╣реИред

рдСрдбрд┐рдпреЛ рдФрд░ рд╡реАрдбрд┐рдпреЛ рдХреЙрд▓


рдпрд╣ рд╣рд╛рд╕реНрдпрд╛рд╕реНрдкрдж рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдЬрд╛рдирдмреВрдЭрдХрд░ рдСрдбрд┐рдпреЛ рдФрд░ рд╡реАрдбрд┐рдпреЛ рдХреЙрд▓ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рдпрдХреАрди рдерд╛ рдХрд┐ рдореИрдВ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдмрди рдЧрдпрд╛ред рдХрдо рд╕реЗ рдХрдо рдмреБрдирд┐рдпрд╛рджреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдмрд╕ WebRtc рдХреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдФрд░ рдкрд╣рд▓рд╛ рд╡реАрдбрд┐рдпреЛ рд╕рддреНрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рдХреЗрд╡рд▓ рдХреБрдЫ рдШрдВрдЯреЗ рд▓рдЧрддреЗ рд╣реИрдВ, рдФрд░, рдЪрдорддреНрдХрд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ, рдкрд╣рд▓рд╛ рдкрд░реАрдХреНрд╖рдг рд╕рдлрд▓ рд░рд╣рд╛ред рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдерд╛ рдХрд┐ рдкрд╣рд▓реА рдмрд╛рд░ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдХреЛрдб рдПрдХ рдорд┐рдердХ рдерд╛ред рдЖрдорддреМрд░ рдкрд░ рдПрдХ рдирдИ рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдкрд╣рд▓рд╛ рдкрд░реАрдХреНрд╖рдг рд╣рдореЗрд╢рд╛ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреА рдмреЗрд╡рдХреВрдл рддреНрд░реБрдЯрд┐ рдХреЗ рдХрд╛рд░рдг рд╡рд┐рдлрд▓ рд╣реЛрддрд╛ рд╣реИ рдЬреИрд╕реЗ "рдПрдХ рд╕реЗрд╡рд╛ рдХреЛ рдЬреЛрдбрд╝рд╛, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдбреАрдЖрдИ рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдкрдВрдЬреАрдХреГрдд рдирд╣реАрдВ рдХрд┐рдпрд╛"ред

Uninitiated рдХреЗ рд▓рд┐рдП WebRtc рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдирд╣реАрдВ рд╣реИ
WebRtc тАФ , peer-to-peer , , peer-to-peer , . - , , . , .

(peer-to-peer), , 3 ( , 3 . 3 ).

тАФ stun . stun , тАФ Source IP Source Port , . ? - . IP . - , , , Source IP Source Port IP - NAT [ Source IP | Source Port | Router External IP | Router Port ]. - , Dest IP Dest Port Router External IP Router Port NAT, , Source IP тАФ Source Port , . , , , , , , NAT . stun NAT . stun Router External IP тАФ Router Port. тАФ . , ┬л┬╗ NAT (NAT traversal) , NAT , stun .
* NAT , . , , WebRtc .

тАФ turn. , , peer-to-peer . Fallback . , , , , , peer-to-peer . turn тАФ coturn, .

тАФ . , . , . тАФ . . , , , :) тАФ .

WebRtc 3 : offer, answer candidate. offer , answer, . , , , , . ( ) , .


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

рдЕрдкрдиреЗ рд╢реБрджреНрдз рд░реВрдк рдореЗрдВ, WebRtc рдХрд╛ рддрд╛рддреНрдкрд░реНрдп рдЙрдореНрдореАрджрд╡рд╛рд░реЛрдВ рдХреЛ рдЬрд▓реНрдж рд╕реЗ рдЬрд▓реНрдж рджреВрд╕рд░реА рдкрд╛рд░реНрдЯреА рдореЗрдВ рднреЗрдЬрдиреЗ рдХрд╛ рд╣реЛрддрд╛ рд╣реИ рддрд╛рдХрд┐ рдмрд╛рддрдЪреАрдд рдЬрд▓реНрдж рд╕реЗ рдЬрд▓реНрдж рд╢реБрд░реВ рд╣реЛ, рдЬреЛ рдХрд┐ рддрд░реНрдХрд╕рдВрдЧрдд рд╣реИред рдореЗрд░реЗ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ, рдЖрдо рддреМрд░ рдкрд░ рд╣рдореЗрд╢рд╛ рдкреНрд░рд╛рдкреНрдд рдкрд╛рд░реНрдЯреА рдХреЗ рдЙрдореНрдореАрджрд╡рд╛рд░рдСрдлрд░ рдЖрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╣реА рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ред рдРрд╕реЗ "рд╢реБрд░реБрдЖрддреА" рдЙрдореНрдореАрджрд╡рд╛рд░реЛрдВ рдХреЛ рдирд╣реАрдВ рдЫреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЙрдиреНрд╣реЗрдВ рдпрд╛рдж рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рддрд╛рдХрд┐ рдмрд╛рдж рдореЗрдВ, рдЬрдм рдкреНрд░рд╕реНрддрд╛рд╡ рдЖрддрд╛ рд╣реИ рдФрд░ RTCPeerConnectionрдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЙрдиреНрд╣реЗрдВ рдХрдиреЗрдХреНрд╢рди рдореЗрдВ рдЬреЛрдбрд╝реЗрдВред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдкреНрд░рд╕реНрддрд╛рд╡ рд╕реЗ рдкрд╣рд▓реЗ рд╣реА рдЙрдореНрдореАрджрд╡рд╛рд░реЛрдВ рдХрд╛ рдЖрдЧрдорди рд╢реБрд░реВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд╕рд╛рде рд╣реА рд╕рд╛рде рдХреБрдЫ рдЕрдиреНрдп рдХрд╛рд░рдгреЛрдВ рд╕реЗ, рдкреВрд░реНрдг-рдХреЙрд▓ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдПрдХ рдЧреИрд░-рддреБрдЪреНрдЫ рдХрд╛рд░реНрдп рдмрдирд╛рддреЗ рд╣реИрдВред рдпрджрд┐ рдХрдИ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдПрдХ рд╕рд╛рде рд╣рдореЗрдВ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдХреНрдпрд╛ рдХрд░реЗрдВ? рд╣рдо рд╕рднреА рд╕реЗ рдЙрдореНрдореАрджрд╡рд╛рд░ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВрдЧреЗ, рдФрд░ рдпрджреНрдпрдкрд┐ рд╣рдо рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рджреВрд╕рд░реЗ рд╕реЗ рдЕрд▓рдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдХреМрди рд╕реЗ рдЙрдореНрдореАрджрд╡рд╛рд░ рдХреЛ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдирд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдирд╣реАрдВ рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдХрд┐рд╕рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдкрд╣рд▓реЗ рдЖрдПрдЧрд╛ред рдпрджрд┐ рдЙрдореНрдореАрджрд╡рд╛рд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЖрдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЙрд╕ рд╕рдордп рдПрдХ рдкреНрд░рд╕реНрддрд╛рд╡ рдЖрддрд╛ рд╣реИ рдЬрдм рд╣рдо рд╕реНрд╡рдпрдВ рдХрд┐рд╕реА рдХреЛ рдлреЛрди рдХрд░рддреЗ рд╣реИрдВ рддреЛ рднреА рд╕рдорд╕реНрдпрд╛рдПрдБ рд╣реЛрдВрдЧреА ред

рдирдВрдЧреЗ WebRtc рдХреЗ рд╕рд╛рде рдХрдИ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВ рдЗрд╕ рдирд┐рд╖реНрдХрд░реНрд╖ рдкрд░ рдЖрдпрд╛ рдерд╛ рдХрд┐ рдЗрд╕ рд░реВрдк рдореЗрдВ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рд╕реНрдореГрддрд┐ рд░рд┐рд╕рд╛рд╡ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛рдЧреНрд░рд╕реНрдд рдФрд░ рдзреЛрдЦрд╛рдзрдбрд╝реА рд╣реЛрдЧреА, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ WebRtc рдмрд╛рддрдЪреАрдд рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдПрдХ рдФрд░ рдЪрд░рдг рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рдореИрдВ рдЗрд╕ рдЕрд╡рд╕реНрдерд╛ рдХреЛ рдХрд╣рддрд╛ рд╣реВрдВ Inquire - Grant/Refuseред

рдпрд╣ рд╡рд┐рдЪрд╛рд░ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЗрд╕ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдореЗрдВ рдХрд╛рдлреА рд╕рдордп рд▓рдЧрд╛ред рд╕реНрдЯреНрд░реАрдорд░ рдмрдирд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╣реА рдХреЙрд▓рд░ рдФрд░ RTCPeerConnection(рдФрд░ рдЖрдорддреМрд░ рдкрд░ WebRtc рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдХрд┐рд╕реА рднреА рдХреЛрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ ) рджреВрд╕рд░реА рддрд░рдл рд╕рд┐рдЧреНрдирд▓ рд╕рд░реНрд╡рд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рд╕рдВрджреЗрд╢ рднреЗрдЬрддрд╛ рд╣реИ Inquireред рдкреНрд░рд╛рдкреНрдд рд╣реЛрдиреЗ рдкрд░, рдпрд╣ рдЬрд╛рдВрдЪрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрд╕ рд╕рдордп (рд╕рд░рд▓ boolрдХреНрд╖реЗрддреНрд░) рдХрд┐рд╕реА рдЕрдиреНрдп рд╕рдВрдЪрд╛рд░ рд╕рддреНрд░ рдореЗрдВ рд╣реИ рдпрд╛ рдирд╣реАрдВ ред рдпрджрд┐ рдпрд╣ рд╣реИ, рддреЛ рдПрдХ рд╕рдВрджреЗрд╢ рд╡рд╛рдкрд╕ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИредRefuse, рдФрд░ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд╣рдордиреЗ рдлреЛрди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХреЛ рдпрд╣ рдмрддрд╛ рджрд┐рдпрд╛ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╡реНрдпрд╕реНрдд рд╣реИ, рдФрд░ рд░рд┐рд╕реАрд╡рд░ - рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреЗ рдлреЛрди рдХреЛ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдмрдХрд┐ рд╡рд╣ рдХрд┐рд╕реА рдЕрдиреНрдп рд╡рд╛рд░реНрддрд╛рд▓рд╛рдк рдореЗрдВ рд╡реНрдпрд╕реНрдд рдерд╛ред рдпрджрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╕реНрд╡рддрдВрддреНрд░ рд╣реИ, рддреЛ рдпрд╣ рдЖрд░рдХреНрд╖рд┐рдд рд╣реИ ред рд╕рдВрджреЗрд╢ рдореЗрдВ Inquireрд╕рддреНрд░ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ , рдФрд░ рдпрд╣ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рд╡рд░реНрддрдорд╛рди рд╕рддреНрд░ рдХреЗ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ ред рдпрджрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЖрд░рдХреНрд╖рд┐рдд рд╣реИ, рддреЛ рд╡рд╣ Inquire/Offer/Candidateрд╡рд░реНрддрдорд╛рди рдХреЗ рдЕрд▓рд╛рд╡рд╛ рд╕рддреНрд░ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рд╕рднреА рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рджреЗрдЧрд╛ ред рдЖрд░рдХреНрд╖рдг рдХреЗ рдмрд╛рдж, рд░рд┐рд╕реАрд╡рд░ рдХреЙрд▓рд░ рдХреЛ рд╕рд┐рдЧреНрдирд▓ рд╕рд░реНрд╡рд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рд╕рдВрджреЗрд╢ рднреЗрдЬрддрд╛ рд╣реИ Grantред рдпрд╣ рдХрд╣рдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдпрд╣ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкреНрд░рд╛рдкреНрдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗрддреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЕрднреА рддрдХ рдХреЛрдИ рдХреЙрд▓ рдирд╣реАрдВ рд╣реИред рдФрд░ рдпрд╣рд╛рдВ рдореБрдЦреНрдп рдмрд╛рдд рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдкреНрд░рд╛рдкреНрдд рдкрдХреНрд╖ рдкрд░ рдПрдХ рдЯрд╛рдЗрдордЖрдЙрдЯ рд▓рдЯрдХрд╛рдП рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдордд рднреВрд▓рдирд╛ред рдЕрдЪрд╛рдирдХ рд╣рдо рдПрдХ рд╕рддреНрд░ рдЖрд░рдХреНрд╖рд┐рдд рдХрд░реЗрдВрдЧреЗ, рдФрд░ рдХреЛрдИ рднреА рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд╛ рдкрд╛рд▓рди рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред

рдХреЙрд▓рд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ Grant, рдФрд░ рдпрд╣ рд╡рд╣ рдЬрдЧрд╣ рд╣реИ рдЬрд╣рд╛рдВ WebRtc рдСрдлрд╝рд░, рдЙрдореНрдореАрджрд╡рд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рд╕рднреА рдХреЗ рд▓рд┐рдП рд╣реИред рд░рд┐рд╕реАрд╡рд░ рдХреЛ рдордХреНрдЦрд┐рдпреЛрдВ рдХреА рдкреЗрд╢рдХрд╢ рдХрд░реЗрдВ, рдФрд░ рд╡рд╣, рд░рд╕реАрдж рдкрд░, рдмрдЯрди рдХреЗ рд╕рд╛рде рдПрдХ рд╕реНрдХреНрд░реАрди рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ рдЙрддреНрддрд░ / рдЕрд╕реНрд╡реАрдХрд╛рд░ред рд▓реЗрдХрд┐рди рдЙрдореНрдореАрджрд╡рд╛рд░, рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣, рдХрд┐рд╕реА рд╕реЗ рдЙрдореНрдореАрдж рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рд╡реЗ рдлрд┐рд░ рд╕реЗ рдСрдлрд╝рд░ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдкрд╣рд▓реЗ рд╣реА рдкрд╣реБрдВрдЪрдиреЗ рд▓рдЧрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдХреЙрд▓ рдХрд╛ рдЬрд╡рд╛рдм рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдЗрдВрддрдЬрд╛рд░ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдХрд╛рд░рдг рдирд╣реАрдВ рд╣реИред рд╡рд╣ рдЬрд╡рд╛рдм рдирд╣реАрдВ рджреЗ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЬрдм рддрдХ рд╕рдордп рд╕рдорд╛рдкреНрддрд┐ рдХреА рд╕рдордп рд╕реАрдорд╛ рд╕рдорд╛рдкреНрдд рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ, рддрдм рддрдХ рдЙрд╕реЗ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдпрд╛ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдВ - рдлрд┐рд░ рдЙрдореНрдореАрджрд╡рд╛рд░реЛрдВ рдХреЛ рдмрд╕ рдмрд╛рд╣рд░ рдирд┐рдХрд╛рд▓ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдФрд░ рднрд╡рд┐рд╖реНрдп рдХреА рдпреЛрдЬрдирд╛


  • рдирд┐рдЬреА рдФрд░ рд╕рдореВрд╣ рдЪреИрдЯ
  • рдкрд╛рда, рдЪрд┐рддреНрд░ рдФрд░ рд╡реАрдбрд┐рдпреЛ рднреЗрдЬрдирд╛
  • рдСрдбрд┐рдпреЛ рдФрд░ рд╡реАрдбрд┐рдпреЛ рдХреЙрд▓
  • рдкреНрд░рд╛рдкреНрддрд┐ рдФрд░ рдкрдврд╝рдиреЗ рдХреА рдкреБрд╖реНрдЯрд┐
  • "рдкреНрд░рд┐рдВрдЯ ..."
  • рд╕реВрдЪрдирд╛рдПрдВ
  • QR рдХреЛрдб рдФрд░ рдЬрд┐рдпреЛрд▓реЛрдХреЗрд╢рди рджреНрд╡рд╛рд░рд╛ рдЦреЛрдЬреЗрдВ


QR рдХреЛрдб рджреНрд╡рд╛рд░рд╛ рдЦреЛрдЬ рдХрд░рдирд╛, рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд░реВрдк рд╕реЗ, рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рд╕рдорд╕реНрдпрд╛рдЧреНрд░рд╕реНрдд рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдХреЛрдб рд╕реНрдХреИрди рдХреЗ рд▓рд┐рдП рд▓рдЧрднрдЧ рд╕рднреА рдкреНрд▓рдЧрдЗрдиреНрд╕ рдЬреЛ рдореИрдВрдиреЗ рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдЗрдирдХрд╛рд░ рдХрд░ рджрд┐рдпрд╛ рдпрд╛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рдпрд╣рд╛рдБ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдФрд░ рдЬрд┐рдпреЛрд▓реЛрдХреЗрд╢рди рдХреА рдЦреЛрдЬ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдЕрднреА рддрдХ рдирд╣реАрдВ рд▓рд┐рдпрд╛ рд╣реИред рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдХреЛрдИ рд╡рд┐рд╢реЗрд╖ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред

рдкреНрд░рдЧрддрд┐ рдореЗрдВ рд╕реВрдЪрдирд╛рдПрдВ, рд╕рд╛рде рд╣реА рд╡реАрдбрд┐рдпреЛ рднреЗрдЬрдирд╛ред

рдФрд░ рдХреНрдпрд╛ рдХрд░рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ?


рдУрд╣, рдмрд╣реБрддред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдХреЛрдИ рдкрд░реАрдХреНрд╖рдг рдирд╣реАрдВ рд╣реИрдВред рд╕рд╣рдХрд░реНрдореА рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦрддреЗ рдереЗ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЖрд░рд╛рдо рдХрд┐рдпрд╛ред
рджреВрд╕рд░реЗ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдХрд┐рд╕реА рдореМрдЬреВрджрд╛ рдЪреИрдЯ рдкрд░ рдЖрдордВрддреНрд░рд┐рдд рдХрд░рдирд╛ рдФрд░ рдЪреИрдЯ рдХреЛ рдЫреЛрдбрд╝рдирд╛ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИред рд╕рд░реНрд╡рд░ рдХреЛрдб рдЗрд╕рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИ, рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛрдб рдирд╣реАрдВ рд╣реИред
рддреАрд╕рд░рд╛, рдпрджрд┐ рд╕рд░реНрд╡рд░ рдкрд░ рддреНрд░реБрдЯрд┐ рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдЕрдзрд┐рдХ рдпрд╛ рдХрдо рд╣реИ, рддреЛ рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд░ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдирд╣реАрдВ рд╣реИред рдпрд╣ рдХреЗрд╡рд▓ рдПрдХ рд▓реЙрдЧ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИ, рдЖрдкрдХреЛ рдСрдкрд░реЗрд╢рди рдХреЛ рдлрд┐рд░ рд╕реЗ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЕрдм, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рднреЗрдЬрдиреЗ рдХрд╛ рддрдВрддреНрд░ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдЪреМрдерд╛, рд╕рд░реНрд╡рд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рдкрд┐рдВрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдбрд┐рд╕реНрдХрдиреЗрдХреНрдЯ рдХрд╛ рдкрддрд╛ рдирд╣реАрдВ рдЪрд▓рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреНрд▓рд╛рдЗрдВрдЯ рдиреЗ рдЗрдВрдЯрд░рдиреЗрдЯ рдЦреЛ рджрд┐рдпрд╛ рд╣реИред рдбрд┐рд╕реНрдХрдиреЗрдХреНрдЯ рддрднреА рдкрддрд╛ рд▓рдЧрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдХреНрд▓рд╛рдЗрдВрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдмрдВрдж рдХрд░ рджреЗрддрд╛ рд╣реИред рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ
рдкрд╛рдВрдЪрд╡реЗрдВ, рдЗрдВрдбреЗрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЫрдард╛, рдЕрдиреБрдХреВрд▓рдиред рдХреЛрдб рдореЗрдВ рднрд╛рд░реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдРрд╕реЗ рд╕реНрдерд╛рди рд╣реЛрддреЗ рд╣реИрдВ рдЬрд╣рд╛рдБ рдХреБрдЫ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ // @@TODO: Poolред рдЕрдзрд┐рдХрд╛рдВрд╢ рд╕рд░рдгрд┐рдпрд╛рдБ рдмрд╕ newрдпрд╣реА рд╣реИрдВред рдмреИрдХрдПрдВрдб рд╕рд░реНрд╡рд░ рдирд┐рд╢реНрдЪрд┐рдд рд▓рдВрдмрд╛рдИ рдХреЗ рдХрдИ рдРрд░реЗ рдмрдирд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣рд╛рдВ рдЖрдкрдХреЛ рдкреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
рд╕рд╛рддрд╡реЗрдВ, рдЧреНрд░рд╛рд╣рдХ рдХреЗ рдХрдИ рд╕реНрдерд╛рди рд╣реИрдВ рдЬрд╣рд╛рдВ рдХреЛрдб awaitрд╕рдорд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИред рдЪрд┐рддреНрд░ рднреЗрдЬрдирд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕рд▓рд┐рдП рдзреАрдорд╛ рд▓рдЧрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдХреЛрдбawaitрдпрд╣ рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдЪрд┐рддреНрд░реЛрдВ рдХреЛ рд╕рд╣реЗрдЬрддрд╛ рд╣реИ рдФрд░ рд╕рдВрджреЗрд╢ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдердВрдмрдиреЗрд▓ рдмрдирд╛рддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЗрд╕рдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдХреЛ рднреА рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдпрд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдЖрдк рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЦреЛрд▓рддреЗ рд╣реИрдВ рдФрд░ рдЖрдкрдХреА рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рдХреЗ рджреМрд░рд╛рди рдЙрдиреНрд╣реЛрдВрдиреЗ рдЖрдкрдХреЛ рдЪрд┐рддреНрд░ рднреЗрдЬреЗ рд╣реИрдВ, рддреЛ рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдзреАрдорд╛ рд╣реЛ рдЬрд╛рдПрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдлрд┐рд░ рд╕реЗ рдпреЗ рд╕рднреА рдЪрд┐рддреНрд░ рдбрд╛рдЙрдирд▓реЛрдб рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ, рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рд╕рд╣реЗрдЬреЗ рдЬрд╛рддреЗ рд╣реИрдВ, рдердВрдмрдиреЗрд▓ рдЙрддреНрдкрдиреНрди рд╣реЛрддреЗ рд╣реИрдВ, рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рд╣реА рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рд╕рдорд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдЖрдкрдХреЛ рд╕реНрдкреНрд▓реИрд╢ рд╕реНрдХреНрд░реАрди рд╕реЗ рдлреЗрдВрдХ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣реЛрдо рд╕реНрдХреНрд░реАрди рдкрд░ред рдпреЗ рд╕рднреА рдирд┐рд░рд░реНрдердХ awaitрдЖрд╕рд╛рди рдбрд┐рдмрдЧрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдП рдЧрдП рдереЗ, рд▓реЗрдХрд┐рди рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдЖрдкрдХреЛ рд░рд┐рд▓реАрдЬ рд╕реЗ рдкрд╣рд▓реЗ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдкреНрд░рддреАрдХреНрд╖рд╛ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдЖрдард╡рд╛рдБрдпреВрдЖрдИ рдЕрдм рдЖрдзрд╛ рддреИрдпрд╛рд░ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдореИрдВрдиреЗ рддрдп рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдЗрд╕реЗ рдХреИрд╕реЗ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдЗрд╕рд▓рд┐рдП, рдЕрдм рд╕рдм рдХреБрдЫ рд╕рд╣рдЬ рдирд╣реАрдВ рд╣реИ, рдЖрдзреЗ рдмрдЯрди рдЕрд╕реНрдкрд╖реНрдЯ рд╣реИрдВ рдХрд┐ рд╡реЗ рдХреНрдпрд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдФрд░ рдмрдЯрди рдХреЛ рдЕрдХреНрд╕рд░ рдкрд╣рд▓реА рдмрд╛рд░ рджрдмрд╛рдпрд╛ рдирд╣реАрдВ рдЬрд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЕрдм рд╡реЗ рдХреЗрд╡рд▓ GestureDetectorрдкреИрдбрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдФрд░ рдмрд┐рдирд╛ рдЖрдЗрдХрди рд╣реИрдВ , рдЗрд╕рд▓рд┐рдП рдЙрдиреНрд╣реЗрдВ рд╣рдореЗрд╢рд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИред рд╕рд╛рде рд╣реА рдХреБрдЫ рдЬрдЧрд╣реЛрдВ рдкрд░ рдкрд┐рдХреНрд╕рд▓ рдУрд╡рд░рдлреНрд▓реЛ рддрдп рдирд╣реАрдВ рд╣реИред
рдиреМрд╡рд╛рдВ, рдЕрдм рдХрд┐рд╕реА рдЦрд╛рддреЗ рдореЗрдВ рд╕рд╛рдЗрди-рдЗрди рдХрд░рдирд╛ рднреА рдЕрд╕рдВрднрд╡ рд╣реИ, рдХреЗрд╡рд▓ рд╕рд╛рдЗрди рдЕрдк рдХрд░реЗрдВред рдЗрд╕рд▓рд┐рдП, рдпрджрд┐ рдЖрдк рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдЕрдирдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЕрдкрдиреЗ рдЦрд╛рддреЗ рдореЗрдВ рд▓реЙрдЧ рдЗрди рдирд╣реАрдВ рдХрд░ рдкрд╛рдПрдВрдЧреЗ :)
рджрд╕рд╡рд╛рдВ, рд╕рддреНрдпрд╛рдкрди рдХреЛрдб рдореЗрд▓ рдкрд░ рдирд╣реАрдВ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЕрдм рдХреЛрдб рдЖрдо рддреМрд░ рдкрд░ рд╣рдореЗрд╢рд╛ рд╕рдорд╛рди рд╣реЛрддрд╛ рд╣реИ, рдлрд┐рд░ рд╕реЗ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдбрд┐рдмрдЧ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИред
рдЧреНрдпрд╛рд░рд╣рд╡рд╛рдБрдХрдИ рд╕реНрдерд╛рдиреЛрдВ рдкрд░ рдПрдХрд▓-рдЬрд┐рдореНрдореЗрджрд╛рд░реА рд╕рд┐рджреНрдзрд╛рдВрдд рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд░рд┐рдлреНрд▓реЗрдХреНрдЯрд░ рдЪрд╛рд╣рд┐рдПред рдбреЗрдЯрд╛рдмреЗрд╕ (рдХреНрд▓рд╛рдЗрдВрдЯ рдФрд░ рд╕рд░реНрд╡рд░ рдкрд░ рджреЛрдиреЛрдВ) рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╡рд░реНрдЧ рдЖрдо рддреМрд░ рдкрд░ рдмрд╣реБрдд рдлреВрд▓рд╛ рд╣реБрдЖ рд╣реЛрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рд╕рднреА рдбреЗрдЯрд╛рдмреЗрд╕ рд╕рдВрдЪрд╛рд▓рди рдореЗрдВ рд▓рдЧреЗ рд╣реЛрддреЗ рд╣реИрдВ ред
рдмрд╛рд░рд╣рд╡реЗрдВ, рдлреНрд░рдВрдЯрдПрдВрдб рд╕рд░реНрд╡рд░ рдЕрдм рд╣рдореЗрд╢рд╛ рдмреИрдХрдПрдВрдб рд╕рд░реНрд╡рд░ рд╕реЗ рдПрдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреА рдЙрдореНрдореАрдж рдХрд░рддрд╛ рд╣реИ, рднрд▓реЗ рд╣реА рд╕рдВрджреЗрд╢ рдПрдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдХреЛрдб IsTypingрдФрд░ рдХреБрдЫ WebRtc- рд╕рдВрдмрдВрдзрд┐рдд рд╕рдВрджреЗрд╢реЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдВрджреЗрд╢ ) рдирд╣реАрдВ рднреЗрдЬрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдПрдХ рдЙрддреНрддрд░ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд┐рдП рдмрд┐рдирд╛, рд╡рд╣ рдХрдВрд╕реЛрд▓ рдХреЛ рдПрдХ рддреНрд░реБрдЯрд┐ рд▓рд┐рдЦрддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдПрдХ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рд╣реИред
рддреЗрд░рд╣рд╡реЗрдВ, рдкреВрд░реНрдг рдЪрд┐рддреНрд░ рдЯреИрдк рдкрд░ рдирд╣реАрдВ рдЦреБрд▓рддреЗ рд╣реИрдВред
рдПрдХ рд╕реМ рдорд┐рд▓рд┐рдпрди рдкрдВрджреНрд░рд╣рд╡рд╛рдВрдХреБрдЫ рд╕рдВрджреЗрд╢ рдЬрд┐рдиреНрд╣реЗрдВ рдмреИрдЪреЛрдВ рдореЗрдВ рднреЗрдЬрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдЙрдиреНрд╣реЗрдВ рдЕрд▓рдЧ рд╕реЗ рднреЗрдЬреЗ рдЬрд╛рддреЗ рд╣реИрдВред рдХреБрдЫ рдбреЗрдЯрд╛рдмреЗрд╕ рдСрдкрд░реЗрд╢рди рдХреЗ рд▓рд┐рдП рднреА рдпрд╣реА рдмрд╛рдд рд▓рд╛рдЧреВ рд╣реЛрддреА рд╣реИред рдПрдХрд▓ рдХрдорд╛рдВрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдХрдорд╛рдВрдб рдХреЛ рдПрдХ рд▓реВрдк await(brr ..) рдХреЗ рд╕рд╛рде рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ ред
рдПрдХ рд╕реМ рдорд┐рд▓рд┐рдпрди рдЫрдареЗ, рдХреБрдЫ рдорд╛рди рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдП рдЬрд╛рдиреЗ рдХреЗ рдмрдЬрд╛рдп рд╣рд╛рд░реНрдбрдХреЛрдб рд╣реИрдВред
рдПрдХ рд╕реМ рджрд╕ рд▓рд╛рдЦ рд╕рд╛рддрд╡реЗрдВрд╕рд░реНрд╡рд░ рдкрд░ рд▓реЙрдЧрд┐рдВрдЧ рдЕрдм рдХреЗрд╡рд▓ рдХрдВрд╕реЛрд▓ рдкрд░ рд╣реИ, рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдореЗрдВ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ, рд╕реАрдзреЗ рд╡рд┐рдЬреЗрдЯ рдкрд░ред рдореБрдЦреНрдп рд╕реНрдХреНрд░реАрди рдкрд░ рдПрдХ рд▓реЙрдЧ рдЯреИрдм рд╣реИ, рдЬрд╣рд╛рдВ рдЯреИрдк рдкрд░ рд╕рднреА рд▓реЙрдЧ рдЧрд┐рд░рд╛рдП рдЬрд╛рддреЗ рд╣реИрдВред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдореЗрд░реА рдХрд╛рдордХрд╛рдЬреА рдорд╢реАрди рдПрдореБрд▓реЗрдЯрд░ рдФрд░ рд╕рд░реНрд╡рд░ (рдХрд╛рдлреНрдХрд╛, рдбреЗрдЯрд╛рдмреЗрд╕, рдореВрд▓реА рдФрд░ рд╕рднреА рд╕рд░реНрд╡рд░) рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╕рднреА рдЪреАрдЬреЛрдВ рдХреЛ рдЪрд▓рд╛рдиреЗ рд╕реЗ рдЗрдирдХрд╛рд░ рдХрд░рддреА рд╣реИред рдХрдиреЗрдХреНрдЯреЗрдб рдбрд┐рд╡рд╛рдЗрд╕ рдХреЗ рд╕рд╛рде рдбреЗрдмрд┐рдЯ рднреА рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рдерд╛, рд╕рдм рдХреБрдЫ рдмрд╕ рдЖрдзреЗ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдХрд╕рдХрд░ рд▓рдЯрдХрд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рдерд╛, рдХреНрдпреЛрдВрдХрд┐ рдХрдВрдкреНрдпреВрдЯрд░ рд▓реЛрдб рдХреЗ рд╕рд╛рде рд╕рд╛рдордирд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рдерд╛ред рдЗрд╕рд▓рд┐рдП, рдЖрдкрдХреЛ рд╣рд░ рдмрд╛рд░ рдПрдХ рдирд┐рд░реНрдорд╛рдг рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдЗрд╕реЗ рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рдЫреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛, рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рдФрд░ рдЗрд╕ рддрд░рд╣ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рд▓реЙрдЧ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЙрдиреНрд╣реЗрдВ рд╡рд┐рдЬреЗрдЯ рдореЗрдВ рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реВрдВред рд╡рд┐рдХреГрдд, рдореБрдЭреЗ рдкрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреЛрдИ рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рд╣реИред рдЙрд╕реА рдХрд╛рд░рдг рд╕реЗ, рдХрдИ рд╡рд┐рдзрд┐рдпрд╛рдБ рд╡рд╛рдкрд╕ рдЖрддреА рд╣реИрдВ FutureрдФрд░awaitрд╡реЗ (рдЕрдкрд╡рд╛рдж рдХреЛ рдкрдХрдбрд╝рдиреЗ рдФрд░ рд╡рд┐рдЬреЗрдЯ рдореЗрдВ рдлреЗрдВрдХрдиреЗ рдХреЗ рд▓рд┐рдП) рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЙрдиреНрд╣реЗрдВ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрджрд┐ рдЖрдк рдХреЛрдб рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдРрд╕рд╛ _logErrorрдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХрдИ рд╡рд░реНрдЧреЛрдВ рдореЗрдВ рдПрдХ рдмрджрд╕реВрд░рдд рд╡рд┐рдзрд┐ рджреЗрдЦреЗрдВрдЧреЗ ред рдпрд╣, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдХрдЪрд░рд╛ рднреА рдЬрд╛рдПрдЧрд╛ред
рдПрдХ рд╕реМ рдорд┐рд▓рд┐рдпрди рдФрд░ рдЖрда, рдХреЛрдИ рдЖрд╡рд╛рдЬрд╝ рдирд╣реАрдВред
рдПрдХ рд╕реМ рдорд┐рд▓рд┐рдпрди рдФрд░ рдиреМрд╡реЗрдВ, рдЖрдкрдХреЛ рдХреИрд╢рд┐рдВрдЧ рдХрд╛ рдЕрдзрд┐рдХ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдПрдХ рд╕реМ рдорд┐рд▓рд┐рдпрди рджрд╕рд┐рдпреЛрдВ, рдмрд╣реБрдд рджреЛрд╣рд░рд╛рд╡ рдХреЛрдбред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХрдИ рдХреНрд░рд┐рдпрд╛рдПрдВ рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдЯреЛрдХрди рдХреА рд╡реИрдзрддрд╛ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддреА рд╣реИрдВ, рдФрд░ рдпрджрд┐ рдпрд╣ рдорд╛рдиреНрдп рдирд╣реАрдВ рд╣реИ, рддреЛ рд╡реЗ рдПрдХ рддреНрд░реБрдЯрд┐ рднреЗрдЬрддреЗ рд╣реИрдВред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдорд┐рдбрд▓рд╡реЗрдпрд░-рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

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

рдореИрдВ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рддрддреНрдкрд░рддрд╛ рдХреЛ 70% рддрдХ рджрд░ рдХрд░реВрдВрдЧрд╛ред

рд╕рд╛рд░рд╛рдВрд╢


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

рдпрджрд┐ рдЖрдкрдХреЗ рдХреЛрдИ рдкреНрд░рд╢реНрди рд╣реИрдВ, рддреЛ рд▓рд┐рдЦреЗрдВред рдореЗрд▓ рдЬреАрдердм рдкрд░ рд╣реИред

All Articles