рд░реЗрдХ рдкрд░ рдХрджрдо рд░рдЦрдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИред рдореИрдВ рдРрд╕реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░реНрд╕ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реВрдВ, рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рдЦреБрдж рдХреЛ рдордЬрдмреВрдд рдкреЗрд╢реЗрд╡рд░реЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рд╣реИ, рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рд╢рд╛рдмреНрджрд┐рдХ рд░реВрдк рд╕реЗ рдорд▓реНрдЯреАрдереНрд░реЗрдбрд┐рдВрдЧ рдХреЛ рджрд┐рдпрд╛ рд╣реИред рд╢реБрд░реБрдЖрдд рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЕрдкрдиреЗ рдкрд╕рдВрджреАрджрд╛ рдХрд╣рд╛рдиреА рдХреЛ рдЧрддрд┐рд░реЛрдз рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛рдКрдВрдЧрд╛ (рдореИрдВ рдбреВрдк рдХреЗ рд▓рд┐рдП рдорд╛рдлреА рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИ)ред рд▓рдЧрднрдЧ рджрд╕ рд╕рд╛рд▓ рдкрд╣рд▓реЗ,
рдПрд╕реЛрд╕рд┐рдПрдЯреЗрдб рдкреНрд░реЗрд╕ рдиреЗ рджреБрдирд┐рдпрд╛ рдХреЛ рдмрддрд╛рдпрд╛ рдХрд┐ рдХреИрд╕реЗ рдПрдХ рдкрд╛рдпрд▓рдЯ рдиреЗ рд╕реНрд╡реАрдбрд┐рд╢ рд╢рд╣рд░ рдХреНрд░рд┐рд╕рд▓рд╕реНрдЯреИрдб рдореЗрдВ рд╣рд╡рд╛рдИ рдЕрдбреНрдбреЗ рдкрд░ рдПрдХ рдпрд╛рддреНрд░реА рд╡рд┐рдорд╛рди рдХреЛ рдЙрддрд╛рд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рднреА рдбрд┐рд╕реНрдкреИрдЪрд░ рдиреЗ рдЙрд╕рдХреЗ рдЕрдиреБрд░реЛрдз рдХрд╛ рдЬрд╡рд╛рдм рдирд╣реАрдВ рджрд┐рдпрд╛ред рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдбрд┐рд╕реНрдкреИрдЪрд░ рдЕрднреА рддрдХ рдЫреБрдЯреНрдЯреА рд╕реЗ рд╡рд╛рдкрд╕ рдирд╣реАрдВ рдЖрдпрд╛ рдерд╛ред рдирддреАрдЬрддрди, рд╡рд┐рдорд╛рди рдПрдХ рдЖрдкрд╛рддрдХрд╛рд▓реАрди рдбрд┐рд╕реНрдкреИрдЪрд░ рдХреЛ рддрддреНрдХрд╛рд▓ рдмреБрд▓рд╛рдП рдЬрд╛рдиреЗ рддрдХ рд╣рд╡рд╛рдИ рдЕрдбреНрдбреЗ рдкрд░ рдЪрдХреНрдХрд░ рд▓рдЧрд╛рддрд╛ рд░рд╣рд╛, рдЬрд┐рд╕рдиреЗ
рдЖрдзреЗ рдШрдВрдЯреЗ рдореЗрдВ рд╡рд┐рдорд╛рди рдХреЛ рдЙрддрд╛рд░рд╛ рдЧрдпрд╛ред рдбрд┐рдмреНрд░реАрдкрд┐рдВрдЧ рдиреЗ рджрд┐рдЦрд╛рдпрд╛ рдХрд┐ рдЗрд╕рдХрд╛ рдХрд╛рд░рдг рд╡рд┐рдорд╛рди рдореЗрдВ рджреЗрд░реА рдереАред рдмреЛрд░реНрдб рдкрд░ рдЬреЛ рдмрд╣реБрдд рдкреНрд░реЗрд╖рдгрдХрд░реНрддрд╛ рдерд╛ рдЬреЛ рдЫреБрдЯреНрдЯреА рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЬрд▓реНрджреА рдореЗрдВ рдерд╛ред
рдЗрд╕рд▓рд┐рдП, рдЬрдм рд╣рдореЗрдВ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХрддрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ, рддреЛ рд╣рдореЗрдВ рд╕рд┐рд░ рдореЗрдВ рд╕рд╛рдорд╛рдиреНрдп рддрд╕реНрд╡реАрд░ рдХреЛ рддреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛: рд╣рдорд╛рд░реЗ рдЪрд╛рд░реЛрдВ рдУрд░ рд╡реНрдпрдХреНрддрд┐рдкрд░рдХ рджреБрдирд┐рдпрд╛ рдПрдХрд▓-рдкрд┐рд░реЛрдпрд╛ рд╣реБрдЖ рд╣реИред рдпрджрд┐ рд╣рдордиреЗ рдПрдХ рдкрддреНрд░ рднреЗрдЬрд╛ рд╣реИ, рдФрд░ рдПрдХ рд╕рдкреНрддрд╛рд╣ рдмрд╛рдж рдПрдХ рдЙрддреНрддрд░ рдорд┐рд▓рд╛ рд╣реИ, рддреЛ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рд╕рдм рдХреБрдЫ рдЙрд╕реА рдкреНрд░рд╡рд╛рд╣ рдХреЗ рднреАрддрд░ рд╣реЛрддрд╛ рд╣реИ; рд╣рдореЗрдВ рдкреНрд░рддрд┐рд╡рд╛рджреА рдФрд░ рдбрд╛рдХрд┐рдпрд╛ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рдирд╣реАрдВ рд╣реЛрдирд╛ рд╣реИред рдФрд░ рд╣рдорд╛рд░реЗ рдХреЛрдб рдХреЗ рд▓рд┐рдП - рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИред
рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рдЬреАрд╡рди рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк
рд░рд┐рдПрдХреНрдЯрд░ рдкреИрдЯрд░реНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд░реВрдмреА рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ (рдореЗрд░реА рд░рд╛рдп рдореЗрдВ)
рдЗрд╡реЗрдиреНрдЯрдореИрдЪрдЗрди рд╣реИ ред рд▓реЗрдХрд┐рди рдЙрд╕рдХреЗ рд╕рд╛рде рд╕реНрдкрд╖реНрдЯ рдХреНрд╖рдг рдирд╣реАрдВ рд╣реИрдВред рдореИрдВ рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдмрд╛рдд рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛ рд░рд╣рд╛ рд╣реВрдВред
EventMachine
gem install eventmachine
EventMachine
рд╡рд░реНрдЧ рдХрдо рдпрд╛ рдЬреНрдпрд╛рджрд╛
рдкреНрд░рд▓реЗрдЦрд┐рдд рд╣реИ рдФрд░ рд╕рд░рд▓ рдкреНрд░рд╢реНрдиреЛрдВ рд╕реЗ рдирд┐рдкрдЯрдирд╛ рдЖрд╕рд╛рди рд╣реИред рдЖрдорддреМрд░ рдкрд░ рд╕рдм рдХреБрдЫ рдХрд┐рд╕реА рди рдХрд┐рд╕реА рддрд░рд╣ рд╕реЗ рд╣реЛрддрд╛ рд╣реИ (
EM
EventMachine
рд▓рд┐рдП рдПрдХ рдЙрдкрдирд╛рдо рд╣реИ):
begin EM.run do тАж
рдЖрдк рд░рд┐рдПрдХреНрдЯрд░ рд╢рдЯрдбрд╛рдЙрди рдкрд░ рдПрдХ рд╣реБрдХ рд▓рдЯрдХрд╛ рд╕рдХрддреЗ рд╣реИрдВ (
EventMachine.add_shutdown_hook {"рдмрд╛рд╣рд░ рдирд┐рдХрд▓ рд░рд╣рд╛ рд╣реИ ..."} )ред рдареАрдХ рд╣реИ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдЖрдк рдордХреНрдЦреА рдкрд░
рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХрдиреЗрдХреНрд╢рди рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рдкреНрд░рд▓реЗрдЦрди, рдореИрдВ рджреЛрд╣рд░рд╛рддрд╛ рд╣реВрдВ, рд╣реИред рд╕реНрдерд╛рдиреЛрдВ рдореЗрдВ, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд╕рдордЭрджрд╛рд░ рднреАред
рд▓реЗрдХрд┐рди рдкрд░реНрдпрд╛рдкреНрдд рдердХрд╛рдКрдкрдиред
рдкрд░рд┐рдгрд╛рдореЛрдВ рдХрд╛ рд╕рдВрдЧреНрд░рд╣
рдЬрдм рддрдХ рд╕рдм рдХреБрдЫ "рдЕрдиреБрд░реЛрдз тЖТ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг" рдореЙрдбрд▓ рддрдХ рд╕реАрдорд┐рдд рд╣реИ, рддрдм рддрдХ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИред рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рд╣рдореЗрдВ рдкрд┐рдЫрд▓реЗ рдПрдХ рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЕрдЧрд▓рд╛ рдЕрдиреБрд░реЛрдз рднреЗрдЬрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ? рдиреЛрдЯ рдХреЛ рдмрд╣реБрдд рд▓рдВрдмрд╛ рди рдмрдирд╛рдиреЗ рдФрд░ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рдХреНрд╖рдгреЛрдВ рдХреЛ рдЪрдмрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ, рдореИрдВ рддреБрд░рдВрдд рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝реВрдВрдЧрд╛:
рдЦреЛрдЬ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЧрдмреНрдмреАрд░ рд╕рд░реНрд╡рд░ рдкрд░ рд╣рдореЗрдВ рдЬрд┐рд╕ рдШрдЯрдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЙрд╕реЗ рдвреВрдВрдвреЗрдВ рдФрд░ рдЙрд╕рдХреЗ рд╕рд╛рде рд╕рдВрд╡рд╛рдж рдХрд░реЗрдВ
рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдпрд╣ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рд╣реЛрддрд╛ рд╣реИ: рд╣рдо рдЦреЛрдЬ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдиреБрд░реЛрдз рднреЗрдЬрддреЗ рд╣реИрдВ, рд╣рдореЗрдВ рдШрдЯрдХреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдорд┐рд▓рддреА рд╣реИ, рд╣рдо рдЗрд╕рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░рддреНрдпреЗрдХ рдШрдЯрдХ рдХрд╛ рд╕рд╛рдХреНрд╖рд╛рддреНрдХрд╛рд░ рдХрд░рддреЗ рд╣реИрдВред рдпрджрд┐ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреА рд╕реВрдЪреА рдореЗрдВ рд╣рдорд╛рд░рд╛ рд╕реНрдерд╛рди рд╣реИ, рддреЛ рд╣рдо рдЖрд░рдВрдн рдХрд░рддреЗ рд╣реИрдВред
рдпрд╣рд╛рдВ рдпрд╣
EventMachine
рдЧрдпрд╛ рд╣реИ рдХрд┐
EventMachine
рдХрд╛ рдЙрдкрдпреЛрдЧ
EventMachine
(рдореИрдВрдиреЗ рд╡рд╣ рд╕рдм рдХреБрдЫ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬреЛ рд╕реАрдзреЗ
EM
рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдирд╣реАрдВ рд╣реИ):
@stream.write_with_handler(disco) do |result| тАж
Iterators рдФрд░ рдЙрдирдХреЗ рдЬрд╛рджреВ
рдорд╛рдирдЪрд┐рддреНрд░ рд╕рдорд╛рд░реЛрд╣ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рд╕рднреА рдХрд╛рдо рдХрд░реЗрдВрдЧреЗред рдЕрдВрддрд┐рдо рдХреЛрд╖реНрдардХ (рдЯрд┐рдкреНрдкрдгреА "рдЙрдкрдЬ") рдХреЗ рддрд╣рдд рд▓рдВрдмреЛрджрд░ рдХреЛрдб рдХреЗрд╡рд▓ рддрднреА рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдЬрдм рдкрд╛рдпрд╛ рдЧрдпрд╛ рдкреНрд░рддреНрдпреЗрдХ рдШрдЯрдХ рдХреЗ рд▓рд┐рдП рд╕рднреА рдбрд┐рд╕реНрдХреЛрдЗрдиреЛ рдПрдХрддреНрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдореИрдВ рдорд╛рдлреА рдорд╛рдБрдЧрддрд╛ рд╣реВрдБ рдЕрдЧрд░ рдпрд╣ рдХрд┐рд╕реА рдХреЛ рд╕реНрдкрд╖реНрдЯ рд▓рдЧрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди Google рдиреЗ рдореБрдЭреЗ рддреНрд╡рд░рд┐рдд рд╕рдорд╛рдзрд╛рди рдХреА рдкреЗрд╢рдХрд╢ рдирд╣реАрдВ рдХреА, рдФрд░ рдпрд╣рд╛рдВ
Fiber
рд╕рд╛рде рдЙрдкрджреНрд░рд╡ рд╢реБрджреНрдз рдирд░рдХ рдореЗрдВ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИред