Play рдлреНрд░реЗрдорд╡рд░реНрдХ 2.0 рдкреНрд░рджрд░реНрд╢рди рдорд╛рдкрди

Play рдлреНрд░реЗрдорд╡рд░реНрдХ 2.0 рдкреНрд░рджрд░реНрд╢рди рдорд╛рдкрди


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

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

рдкрд░реАрдХреНрд╖рдг рдЖрд╡реЗрджрди

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

рдкрд░реАрдХреНрд╖рдг рдХреЗ рддрд╣рдд рдЖрд╡реЗрджрди рддреАрди рдореБрдЦреНрдп рдХрд╛рд░реНрдп рдХрд░реЗрдЧрд╛:

рд╡рд┐рдХрд╛рд╕ рдХреЗ рджреМрд░рд╛рди, рдЕрдХреНрдХрд╛ 2.0 рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд╕реНрдХрд╛рд▓рд╛ рднрд╛рд╖рд╛ рдореЗрдВ рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдХреНрдпреЛрдВрдХрд┐ рдореЗрд░реЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рдпрд╣ рдЬрд╛рд╡рд╛ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдХреНрдХрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред рдиреАрдЪреЗ рдореИрдВ рдХреЛрдб рдХреЗ рдореБрдЦреНрдп рднрд╛рдЧреЛрдВ рдХреЛ рдХреЗрд╡рд▓ рдкреНрд▓реЗ 2.0 рдореЗрдВ рдХрдиреЗрдХреНрд╢рди рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рд╕рд░рд▓рддрд╛ рджрд┐рдЦрд╛рдКрдВрдЧрд╛ рдФрд░ рдЗрд╕ рдкреЛрд╕реНрдЯ рдХрд╛ рд╕рд╛рд░ рдирд╣реАрдВ рдЫреЛрдбрд╝реВрдВрдЧрд╛ред рд╕рднреА рдХреЛрдб рдЧрд┐рдЯ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдПрдХ рд▓рд┐рдВрдХ рдЬреЛ рдкреНрд░рдХрд╛рд╢рди рдХреЗ рдЕрдВрдд рдореЗрдВ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдЕрднрд┐рдиреЗрддрд╛ рдзреВрдордХреЗрддреБ-рдЕрдк

 ... lazy val channel: PushEnumerator[String] = ch ... def receive = { case Message(message) => { channel.push(message) } ... case Close => { channel.push("closed") channel.close() self ! Quit } } ... 

channel рдЪрд░ рдзреВрдордХреЗрддреБ рдХрдиреЗрдХреНрд╢рди (рдкреНрд░рдХрд╛рд░ - Enumerator ) рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рд╕реНрд░реЛрдд рд╣реИ, рдЬрд┐рд╕реЗ рдиреАрдЪреЗ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдзреВрдордХреЗрддреБ рдХрдиреЗрдХреНрд╢рди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ Comet -рдХрдиреЗрдХреНрд╢рди (рдкреНрд░рдХрд╛рд░ - Enumeratee ) рдХреЗ рд▓рд┐рдП рдкреНрд░реЗрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЖрдк рдпрд╣рд╛рдВ Play рдореЗрдВ рдбреЗрдЯрд╛ рд╕реНрдЯреНрд░реАрдо рдХреЗ рд╕реНрд░реЛрддреЛрдВ-рдХрдиреНрд╡рд░реНрдЯрд░реНрд╕-рдЙрдкрднреЛрдХреНрддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред рдбреЗрдЯрд╛ рдХреЛ channel.push(message) рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗ рдзреВрдордХреЗрддреБ рд╕реЙрдХреЗрдЯ рдореЗрдВ рдкреНрд░рд╕рд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред channel.close() рдХрд╣рдХрд░ рдПрдХ рдзреВрдордХреЗрддреБ рд╕реЙрдХреЗрдЯ рдХреЛ рдмрдВрдж рдХрд░рдирд╛ред

рдЖрд╡реЗрджрди рдХреЗ рдореБрдЦреНрдп рдЕрднрд┐рдиреЗрддрд╛

рдХрдиреЗрдХреНрд╢рдирд╕реБрдкрд░рд╡рд╛рдЗрдЬрд░ рдЕрднрд┐рдиреЗрддрд╛ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ: рдПрдХ рдзреВрдордХреЗрддреБ рдХрдиреЗрдХреНрд╢рди рдмрдирд╛рдирд╛, рдирд┐рд░реНрдорд┐рдд рдХрдиреЗрдХреНрд╢рдиреЛрдВ рдХреЛ рд╕рдВрджреЗрд╢ рднреЗрдЬрдирд╛, рд╕рднреА рдХрдиреЗрдХреНрд╢рдиреЛрдВ рдХреЛ рдмрдВрдж рдХрд░рдирд╛ред
 ... var connectionActors = Seq.empty[ActorRef] def receive = { case SetConnect(connectionId) => { lazy val channel: PushEnumerator[String] = Enumerator.imperative( onComplete = self ! Disconnect(connectionId) ) val connectionActor = context.actorOf(Props(new ConnectionActor(channel)), connectionId) connectionActors = connectionActors :+ connectionActor sender ! channel } case BroadcastMessage(message) => { connectionActors.foreach(_ ! Message(message)) } case CloseAll => { connectionActors.foreach(_ ! Close) } } ... 

рдирд┐рд░реНрдорд┐рдд рдЕрднрд┐рдиреЗрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдВрдХ рдХрдиреЗрдХреНрд╢рдирдПрдХреНрдЯрд░ рдЕрдиреБрдХреНрд░рдо (рдкреНрд░рдХрд╛рд░ - Seq [ActorRef]) рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдЬрдм рдПрдХ рдХрдиреЗрдХреНрд╢рди рд╕реНрдерд╛рдкрд┐рдд рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдЪреИрдирд▓ рдЪреИрдирд▓ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдирдП рдХрдиреЗрдХреНрд╢рдирдПрдХреНрдЯрд░ рдХреЛ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЕрднрд┐рдиреЗрддрд╛рдУрдВ рдХреА рд╕реВрдЪреА рдореЗрдВ рдПрдХ рдЕрднрд┐рдиреЗрддрд╛ рдХреЛ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕рдВрджреЗрд╢ рдХреИрд╕реЗ рднреЗрдЬреЗ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдХрдиреЗрдХреНрд╢рди рдмрдВрдж рд╣реИрдВ рдпрд╣ рдХреЛрдб рд╕реЗ рд╕реНрдкрд╖реНрдЯ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рд╡рд░реНрддрдорд╛рди рдореВрд▓реНрдп рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрднрд┐рдиреЗрддрд╛

рдпрд╣ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ StorageActor рд▓рд┐рдП рдПрдХ рдореВрд▓реНрдп рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХреБрдЫ рдХреНрд░рд┐рдпрд╛рдПрдВ рдХреА рдЬрд╛рддреА рд╣реИрдВ рдФрд░ рдореВрд▓реНрдп рд╕рднреА рдзреВрдордХреЗрддреБ-рдХрдиреЗрдХреНрд╢рдиреЛрдВ рдХреЛ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рднреА рд▓реМрдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рддрд░рд╣, рдХреБрдЫ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдирдХрд▓реА рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдЧреНрд░рд╛рд╣рдХ рдЕрдиреБрд░реЛрдз рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЙрд╕рд╕реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИред
 ... var value = "" def receive = { case Put(v) => { value = v connectSupervisor ! BroadcastMessage(value) sender ! value } } ... 

рдЖрд╡реЗрджрди рдирд┐рдпрдВрддреНрд░рдХ

 ... object Application extends Controller { ... def waitFor(connectionId: String) = Action { implicit val timeout = Timeout(1.second) AsyncResult { (ActorsConfig.connectSupervisor ? (SetConnect(connectionId)) ).mapTo[Enumerator[String]].asPromise.map { chunks => Ok.stream(chunks &> Comet( callback = "console.log")) } } } def broadcastMessage(message: String) = Action { ActorsConfig.connectSupervisor ! BroadcastMessage(message) Ok } def putValueAsync(value: String) = Action { implicit val timeout = Timeout(1.second) Async { (ActorsConfig.storageActor ? Put(value)).mapTo[String].asPromise.map { value => Ok(value) } } } def closeAll = Action { ActorsConfig.connectSupervisor ! CloseAll Ok } } 

рдЖрдиреЗ рд╡рд╛рд▓реЗ HTTP рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рдкрддреЗ рдЗрд╕ рдирд┐рдпрдВрддреНрд░рдХ рдХреЗ рддрд░реАрдХреЛрдВ рдкрд░ рдореИрдк рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ (рдорд╛рд░реНрдЧ рдХрд╛ рд╡рд┐рд╡рд░рдг conf/routes рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╣реИ)ред рдпрд╣рд╛рдВ рд╕рдмрд╕реЗ рдмрдбрд╝реА рд░реБрдЪрд┐ waitFor рд╡рд┐рдзрд┐ рд╣реИ, рдЬреЛ рдПрдХ рдзреВрдордХреЗрддреБ рд╕реЙрдХреЗрдЯ рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рд╕рд╛рде рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ Enumerator[String] рдПрдХ рдЪреИрдирд▓ рдХреЛ waitFor Enumerator[String] ред SetConnect рд╕рдВрджреЗрд╢ рдХреЗ рдЬрд╡рд╛рдм рдореЗрдВ рдЕрднрд┐рдиреЗрддрд╛ рджреНрд╡рд╛рд░рд╛ рдЪреИрдирд▓ рдХреЛ рд╕реЙрдХреЗрдЯ рдореЗрдВ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЪреИрдирд▓ рдореЗрдВ рдЖрдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░рддреНрдпреЗрдХ рд╕рдВрджреЗрд╢ рдХреЛ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ Comet( callback = "console.log") рдСрдмреНрдЬреЗрдХреНрдЯ Comet( callback = "console.log") рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░реЗрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ console.log рдлрд╝рдВрдХреНрд╢рди рд╣реИред

рдХреНрд▓рд╛рдЗрдВрдЯ рд╕рд╛рдЗрдб рдкрд░, рдПрдХ рдЫрд┐рдкреЗ рд╣реБрдП iframe рддрддреНрд╡ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдзреВрдордХреЗрддреБ рдХрдиреЗрдХреНрд╢рди рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
 <iframe src='/wait?cid=1' style='display:none'/> 

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

рдкрд░реАрдХреНрд╖рдг рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ 1 рдЬреАрдмреА рд░реИрдо рдФрд░ 1 рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЛрд░ (рднреМрддрд┐рдХ рдХрдВрдкреНрдпреВрдЯрд░ рдХрд╛ рдкреНрд░реЛрд╕реЗрд╕рд░ рдЗрдВрдЯреЗрд▓ рдХреЛрд░ i5-2400 3.1GHz рд╣реИ) рдХреЗ рд╕рд╛рде Ubuntu 11.10 (32-рдмрд┐рдЯ) рдЪрд▓рд╛рдиреЗ рд╡рд╛рд▓реА рдПрдХ рдЖрднрд╛рд╕реА рдорд╢реАрди рдкрд░ рдЪрд▓рд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред

рдорд╛рдирдХ рдЙрдкрдХрд░рдг (JMeter, Visual Studio Load Test) рдХреЗ рд╕рд╛рде рдкрд░реАрдХреНрд╖рдг рд╡рд┐рдлрд▓ рд░рд╣рд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ 700 рд╕рдорд╛рдирд╛рдВрддрд░ рдзрд╛рдЧреЛрдВ рдХреЗ рдкреНрд░рдХреНрд╖реЗрдкрдг рдиреЗ рдкрд░реАрдХреНрд╖рдг рдкреНрд░рдгрд╛рд▓реА рдХреЛ рдЗрддрдирд╛ рд╡рд┐рд╕реНрдорд┐рдд рдХрд░ рджрд┐рдпрд╛ рдХрд┐ рдХрдо рд╕реЗ рдХрдо рдХреЛрдИ рдорд╣рддреНрд╡рдкреВрд░реНрдг рднрд╛рд░ рдкреИрджрд╛ рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рдерд╛ред рдПрдХ рд╡рд┐рд╢реЗрд╖ рдкрд░реАрдХреНрд╖рдг рдЙрдкрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЬреИрд╕реЗ рдХрд┐ рдЧреИрдЯрд▓рд┐рдВрдЧ рддрдирд╛рд╡ рдЙрдкрдХрд░рдг (рдЬрд┐рд╕рдХреА рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рднреА рдЕрдХреНрдХрд╛ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ) рдзреВрдордХреЗрддреБ-рдХрдиреЗрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рдкрд░реАрдХреНрд╖рдг рдлрд╝рдВрдХреНрд╢рди рдХреА рдХрдореА рдХреЗ рдХрд╛рд░рдг рд╕рдВрднрд╡ рдирд╣реАрдВ рдерд╛ред рдЙрд╕реА рд╕рдордп, рд╕рдВрд╢реЛрдзрди рднреА рдПрдХ рдХрдард┐рди рдХрд╛рд░реНрдп рдерд╛, рдХреНрдпреЛрдВрдХрд┐ рдбреЗрд╡рд▓рдкрд░ рдкреНрд░рд▓реЗрдЦрди рдирд┐рд░реНрдорд╛рдгрд╛рдзреАрди рд╣реИред рдЗрди рдХрд╛рд░рдгреЛрдВ рд╕реЗ, рд╣рдорд╛рд░реЗ рдЕрдкрдиреЗ рдкрд░реАрдХреНрд╖рдг рдЙрдкрдХрд░рдг рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

рдЯреЗрд╕реНрдЯ рд╕реНрдХреНрд░рд┐рдкреНрдЯ

рдкрд░рд┐рджреГрд╢реНрдп рдореЗрдВ рддреАрди рдЪрд░рдг рд╣реЛрддреЗ рд╣реИрдВ:

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

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

  1. рдзреВрдордХреЗрддреБ рдХрдиреЗрдХреНрд╢рди рдХреА рдЕрдзрд┐рдХрддрдо рд╕рдВрдЦреНрдпрд╛ рдФрд░ рдЙрдкрдпреЛрдЧ рдХреА рдЧрдИ рд░реИрдо рдХреА рдорд╛рддреНрд░рд╛ рдХреЛ рдорд╛рдкреЗрдВред

    рдЗрд╕ рдкрд░реАрдХреНрд╖рдг рд╕рдореВрд╣ рдореЗрдВ, рдзреВрдордХреЗрддреБ-рдХрдиреЗрдХреНрд╢рди рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдПрдХрдорд╛рддреНрд░ рдорд╛рди рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рдХрдиреЗрдХреНрд╢рди рдмрдВрдж рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВред
    рдзреВрдордХреЗрддреБ рдХрдиреЗрдХреНрд╢рди рдХреА рд╕рдВрдЦреНрдпрд╛рдХрдиреЗрдХреНрд╢рди рдЖрд╡реГрддреНрддрд┐ (1 / рдПрдордПрд╕)рдЕрдзрд┐рдХреГрдд рдореЗрдореЛрд░реА (MB)рдХрдиреЗрдХреНрд╢рди рд╕реЗрдЯрдЕрдк рдХреЗ рджреМрд░рд╛рди рдЕрдзрд┐рдХрддрдо CPU рдЙрдкрдпреЛрдЧрдореВрд▓реНрдп рднреЗрдЬрддреЗ рд╕рдордп рдЕрдзрд┐рдХрддрдо CPU рдЙрдкрдпреЛрдЧ
    500503615%15%
    1000405617.5%15%
    30002014525%62%
    30001014240.6%61%
    3000514059.9%70.8%
    3000313898%69%
    6000426280.5%93.4%
    8000439473.7%80.9%
    10000448577.1%100%

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

  2. рдореВрд▓реНрдп рднреЗрдЬрдиреЗ рдХреЗ рдЕрдиреБрд░реЛрдзреЛрдВ рдФрд░ рдЕрд▓реНрдкрдХрд╛рд▓рд┐рдХ рд╢рд┐рдЦрд░ рднрд╛рд░ рдХреЗ рдЕрдзрд┐рдХрддрдо рдкреНрд░рд╡рд╛рд╣ рдХрд╛ рдорд╛рдкрдиред

    рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдкрд┐рдЫрд▓реЗ рдкрд░реАрдХреНрд╖рдгреЛрдВ рд╕реЗ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдПрдХ рдзреВрдордХреЗрддреБ рдХрдиреЗрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рдореВрд▓реНрдп рднреЗрдЬрдирд╛ рдПрдХ рд╕рдВрд╕рд╛рдзрди-рдЧрд╣рди рд╕рдВрдЪрд╛рд▓рди рд╣реИ, рдЗрд╕рд▓рд┐рдП, рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рдЗрд╕ рд╕рдореВрд╣ рдореЗрдВ, рд╕рд░реНрд╡рд░ рдХреЗ рдЕрдзрд┐рдХрддрдо рдкреНрд░рд╡рд╛рд╣ рдХреЛ рдорд╛рдкрдиреЗ рдХреЗ рд▓рд┐рдП, рдХрдиреЗрдХреНрд╢рди рдХреА рд╕рдВрдЦреНрдпрд╛ рдХрдо рд╣реЛ рдЬрд╛рдПрдЧреАред
    рдзреВрдордХреЗрддреБ рдХрдиреЗрдХреНрд╢рди рдХреА рд╕рдВрдЦреНрдпрд╛рдкреНрд░рд╕реНрддреБрдд рдореВрд▓реНрдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛рдлреНрд░реАрдХреНрд╡реЗрдВрд╕реА рднреЗрдЬреЗрдВ (1 / ms)рдореИрдХреНрд╕ рд╕реАрдкреАрдпреВ рдпреВрд╕реЗрдЬ рдСрди рд╕рдмрдорд┐рдЯрдФрд╕рдд рдХреНрд╡реЗрд░реА рдирд┐рд╖реНрдкрд╛рджрди рд╕рдордп (ms)рдЕрд╕реНрд╡реАрдХреГрдд рдЕрдиреБрд░реЛрдзреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛
    10001010085.7%1637
    10001050076.5%450
    100010200100%3742
    5001020077%390
    1001010025%190
    1001005068.9%350
    10010030100%2500
    101002031%120
    1010001061.7%180
    101000598.7%470
    11000458.2%270
    11000292.3%330
    1100002100%4004636
    180004100%4153217
    150005100%399292
    130007100%1290
    12000798%580

    рдкреНрд░рджрд░реНрд╢рди рдХрд┐рдП рдЧрдП рдкрд░реАрдХреНрд╖рдгреЛрдВ рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдЖрд╡реЗрджрди рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб 500 рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рдЕрд▓реНрдкрдХрд╛рд▓рд┐рдХ рд╢рд┐рдЦрд░ рднрд╛рд░ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб 100-150 рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рднрд╛рд░ рдХреЗ рд╕рд╛рде рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред


рдЕрджреНрдпрддрди:
рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЧрдпрд╛ рдЖрд╡реЗрджрди: git: //github.com/tolyasik/testeeApp.it
рдкрд░реАрдХреНрд╖рдг рдЖрд╡реЗрджрди: git: //github.com/tolyasik/testerApp.git

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


All Articles