рддреЛ,
EventMachine рд░реВрдмреА рдореЗрдВ рдиреЗрдЯрд╡рд░реНрдХрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рддреЗрдЬ рдФрд░ рдЖрд╕рд╛рди рдврд╛рдВрдЪрд╛ рд╣реИред
EventMachine рдПрдХ рдЗрд╡реЗрдВрдЯ-рдУрд░рд┐рдПрдВрдЯреЗрдб (рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕) рдиреЗрдЯрд╡рд░реНрдХ рдХрдиреЗрдХреНрд╢рди рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдЯреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред (рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рдмрд╣реБрдд рд╕рд╛рд░реА рдЬрд╛рдирдХрд╛рд░реА рдиреЗрдЯрд╡рд░реНрдХ рдХрдиреЗрдХреНрд╢рди рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдФрд░ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдореЙрдбрд▓ рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдкрд┐рдд рд╣реИ)ред
рдЪреВрдВрдХрд┐, рд░реВрд╕реА рднрд╛рд╖реА рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░, рдЗрд╕ рдЕрджреНрднреБрдд рдордгрд┐ рдкрд░ рдмрд╣реБрдд рдЦрд░рд╛рдм рдЬрд╛рдирдХрд╛рд░реА рдореИрдВ рдЗрд╕ рд▓реЗрдЦ рдХреЛ рдкреЛрд╕реНрдЯ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред
рд░реВрдмреА рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдорд╛рдирдХ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛:
рдордгрд┐ рд╕реНрдерд╛рдкрд┐рдд рдШрдЯрдирд╛рдЖрдЗрдП рдкреНрд░рд▓реЗрдЦрди рд╕реЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ (рдереЛрдбрд╝рд╛ рд╕рдВрд╢реЛрдзрд┐рдд):
require 'rubygems' require 'eventmachine' class EchoServer < EventMachine::Connection def post_init puts " " end def receive_data data send_data ">>>
рдЕрдм рд╣рдо рдХреНрд░рдо рдореЗрдВ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВрдЧреЗ (рд╡рд┐рдкрд░реАрдд - рдпрд╣ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реЛрдЧрд╛):
EventMachine :: рдЪрд▓рд╛рдПрдБ - рдЖрд░рдВрдн рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╕рдВрджреЗрд╢ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдЪрдХреНрд░ (
EventReactor ) рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рд╡рд╛рдкрд╕реА рдХреЗрд╡рд▓ рддрднреА рд╣реЛрддреА рд╣реИ рдЬрдм
stop_event_loop рд╡рд┐рдзрд┐
рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ ред рд╕рдВрджреЗрд╢ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдЪрдХреНрд░ рдХреА рд╢реБрд░реБрдЖрдд рд╕реЗ рдкрд╣рд▓реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдмреНрд▓реЙрдХ рдХреЛ рд╡рд┐рдзрд┐ рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ (рдФрд░ рдЖрд╡рд╢реНрдпрдХ) рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рдпрд╣рд╛рдВ рдПрдХ рд╕рд░реНрд╡рд░ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЯрд╛рдЗрдорд░ рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдХреНрд▓рд╛рдЗрдВрдЯ рдХрдиреЗрдХреНрд╢рди рд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЖрджрд┐ред рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдо рдЗрдХреЛ рд╕рд░реНрд╡рд░ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдо рд╡рд┐рдзрд┐ (
EventMachine рдореЙрдбреНрдпреВрд▓ рдХреА рд╡рд┐рдзрд┐)
EventMachine :: start_server рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ , рдЗрд╕рдХреЗ рдкреИрд░рд╛рдореАрдЯрд░ рдЖрдИрдкреА рдкрддреЗ рдФрд░ рд╕реБрдирдиреЗ рдХреЗ рд▓рд┐рдП рдкреЛрд░реНрдЯ рд╣реИрдВ, рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдЖрдИрдкреА рдЦрд╛рд▓реА рд╣реИ рддрд╛рдХрд┐ рдЖрдк рдХрд┐рд╕реА рднреА рд╣реЛрд╕реНрдЯ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░ рд╕рдХреЗрдВред рдЕрдЧрд▓рд╛ рдФрд░ рд╢рд╛рдпрдж рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкреИрд░рд╛рдореАрдЯрд░ рдХрдиреЗрдХреНрд╢рди рд╣реИрдВрдбрд▓рд░ рд╣реИ - рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рд╡рд░реНрдЧ рдХрд╛ рдирд╛рдо (
EventMachine рдХрд╛ рдПрдХ
рдЙрдкрд╡рд░реНрдЧ :: рдХрдиреЗрдХреНрд╢рди ) рдпрд╛ рдПрдХ рдореЙрдбреНрдпреВрд▓ (рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдореЙрдбреНрдпреВрд▓
EventMachine рдХреЗ рдЕрдЬреНрдЮрд╛рдд рдЙрдкрд╡рд░реНрдЧ рдХреЗ рд╕рд╛рде
рдорд┐рд╢реНрд░рд┐рдд рд╣реЛрддрд╛ рд╣реИ :: рдХрдиреЗрдХреНрд╢рди )ред рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдпрд╣
рдЗрдХреЛрд╕реНрд╡рд░ рд╡рд░реНрдЧ рд╣реИред
рд╕рд░реНрд╡рд░ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХрдиреЗрдХреНрд╢рди рдЗрдХреЛрд╕реНрд╡рд░ рдХреНрд▓рд╛рд╕ рдХреА рдЕрдкрдиреА рд╡рд╕реНрддреБ рдХреЛ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИ !!!рдореИрд╕реЗрдЬ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рд▓реВрдк (
EventReactor ) рдореЗрдВ, рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рдЗрд╕ рд╕рдВрджрд░реНрдн рдореЗрдВ, рдпреЗ
рдЗрдХреЛрд╕реНрд╡рд░ рдХреНрд▓рд╛рд╕ рдХреЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рддрд░реАрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рд╣реИрдВред рдореБрдЦреНрдп рд╕рдВрджреЗрд╢ рд╣реИрдВ:
- post_init - рдХрдиреЗрдХреНрд╢рди рд╕реНрдерд╛рдкрд┐рдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ
- unbind - рдЬрдм рдПрдХ рдХрдиреЗрдХреНрд╢рди рдЯреВрдЯ рдЧрдпрд╛ рд╣реИ рддреЛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ
- Rece_data - рдХрдиреЗрдХреНрд╢рди рд╕реЗ рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдиреЗ рдкрд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ
рдЙрдкрд░реЛрдХреНрдд рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рд╕рд╛рде рдХрдиреЗрдХреНрд╢рди рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдХрдиреЗрдХреНрд╢рди рдмрдВрдж рд╣реЛрдиреЗ рдкрд░ "рд╕рд░реНрд╡рд░ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдирд╛" рд╕рдВрджреЗрд╢ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддрд╛ рд╣реИред рдЬрдм рдХреЛрдИ рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдЙрд╕реЗ
send_data рд╡рд┐рдзрд┐ (рд╕рдВрджреЗрд╢ рднреЗрдЬреЗрдВ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд╛рдкрд╕ рднреЗрдЬ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрджрд┐ рдХреЛрдИ рд╕рдВрджреЗрд╢ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдХрдиреЗрдХреНрд╢рди рдмрдВрдж рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
рд╡рд░реНрдЧ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП, рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рджреЗрдЦреЗрдВред
рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рд╕рд╛рде, рд╕рдм рдХреБрдЫ рд▓рдЧрднрдЧ рдЕрдиреБрд░реВрдк рд╣реИ - рдЙрджрд╛рд╣рд░рдг рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рдкрд╛рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рд░реВрд╕реА рднреА рд╢рд╛рдорд┐рд▓ рд╣реИред
рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдЯреЗрд▓рдиреЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд░реАрдХреНрд╖рдг рдХрд░рдирд╛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рд╣реИ:
рдЯреЗрд▓рдиреЗрдЯ рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯ 11777рд╣рдо рдЕрдзрд┐рдХ рджрд┐рд▓рдЪрд╕реНрдк рд╡рд┐рд╖рдпреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗред
рдореИрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА
EventMachine рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рд╣рдм рдЪреИрдЯ рдкрд░ рдорд┐рд▓рд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЗрд╕рдХреЗ рд╕рднреА
рдЙрдкрд╣рд╛рд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЕрдм рд╣рдо рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдЪреИрдЯ рд▓рд┐рдЦреЗрдВрдЧреЗ (рдореИрдВ рдЭреВрда рдирд╣реАрдВ рдмреЛрд▓ рд╕рдХрддрд╛, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрджрд┐ рдЖрдк рдХреЛрдб рдХреЛ рдереЛрдбрд╝рд╛ рдареАрдХ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдПрдХ рд╕рдВрдХреЗрдд рдХреЗ рд░реВрдк рдореЗрдВ,
EventMachine.defer рд╡рд┐рдзрд┐) рд╡рд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ 1000 рдХрдиреЗрдХреНрд╢рди рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░реЗрдЧрд╛ред
EventMachine :: рдЪреИрдирд▓ рдЪреИрдирд▓реЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рдпрд╣ рддрдВрддреНрд░ рдмрд┐рд▓реНрдХреБрд▓ рдирдпрд╛ рдирд╣реАрдВ рд╣реИ рдФрд░ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рдПрдХ рд╕рдВрдкреВрд░реНрдг рдкреИрдЯрд░реНрди рд╣реИред рддрдВрддреНрд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ - рдПрдХ рдЪреИрдирд▓ рд╣реИ (рдЪрд▓реЛ рдПрдХ рдХрд╛рд░реНрдпрд╛рд▓рдп рднрд╡рди рдХреЗ рдлрд░реНрд╢ рдХрд╛ рдПрдХ рд▓рдВрдмрд╛ рдЧрд▓рд┐рдпрд╛рд░рд╛ рдХрд╣рддреЗ рд╣реИрдВ), рдФрд░ рдЧреНрд░рд╛рд╣рдХ рд╣реИрдВ (рдЬреЛ рдЧрд▓рд┐рдпрд╛рд░реЗ рдореЗрдВ рд╣реЛрдиреЗ рд╡рд╛рд▓реА рд╣рд░ рдЪреАрдЬ рдХреЛ рд╕реБрдирдиреЗ рдХреЗ рд▓рд┐рдП рджрд░рд╡рд╛рдЬреЗ рдЦреЛрд▓рддреЗ рд╣реИрдВ)ред рдХреЛрдИ рднреА, рдПрдХ рдЧреНрд░рд╛рд╣рдХ рднреА рдирд╣реАрдВ (рдЬрд┐рд╕рдиреЗ рджрд░рд╡рд╛рдЬрд╛ рдирд╣реАрдВ рдЦреЛрд▓рд╛ рдерд╛) рдЪреИрдирд▓ рдХреЛ рдПрдХ рд╕рдВрджреЗрд╢ рднреЗрдЬ рд╕рдХрддрд╛ рд╣реИ (рдЧрд▓рд┐рдпрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рднреА рдЪрд┐рд▓реНрд▓рд╛рдУ) рдФрд░ рд╕рднреА рдЧреНрд░рд╛рд╣рдХ рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВрдЧреЗ (рд╕реБрдиреЗрдВрдЧреЗ)ред рдЖрдк рдЪреИрдирд▓ (рджрд░рд╡рд╛рдЬрд╛ рдмрдВрдж) рд╕реЗ рд╕рджрд╕реНрдпрддрд╛ рд╕рдорд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рддреЛ, рдЪреИрдирд▓ рдХреЗ рддреАрди рддрд░реАрдХреЗ рд╣реИрдВ:
рд╕рджрд╕реНрдпрддрд╛ (рд╕рджрд╕реНрдпрддрд╛),
рдкреБрд╢ (рд╕рдВрджреЗрд╢ рднреЗрдЬреЗрдВ),
рд╕рджрд╕реНрдпрддрд╛ рд╕рдорд╛рдкреНрдд рдХрд░реЗрдВ (рд╕рджрд╕реНрдпрддрд╛ рд╕рдорд╛рдкреНрдд рдХрд░реЗрдВ)ред рдиреАрдЪреЗ рдПрдХ рдЪреИрдЯ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИ (рдПрдХ рдЪреИрдирд▓ рдХреЗ рд╕рд╛рде - рдПрдХ рдХрдорд░рд╛)
require 'rubygems' require 'eventmachine' require 'socket' class User < EventMachine::Connection @@room = EventMachine::Channel.new attr_reader :port, :ip, :sid def receive_data data @@room.push("
рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░,
EventMachine рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд╕рд╛рдорд╛рдиреНрдп
рд╕реЗ рдХреБрдЫ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реИред рдпрд╣ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХреЗ рдХрд╛рд░рдг рд╣реИ, рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдмреНрд▓реЙрдХреЛрдВ, рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдФрд░ рдЕрдзрд┐рдХ рдХрд╛ рдЙрдкрдпреЛрдЧред рдЙрдкрд░реЛрдХреНрдд рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ, рдпрд╣ рд▓рдЧрднрдЧ рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрджрд┐ рдЖрдк
EventMachine рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рдЖрдкрдХреЛ рдЗрд╕рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝реЗрдЧрд╛ред