рд░реЗрд▓реЛрдВ рдореЗрдВ HMVC рдкреИрдЯрд░реНрди рдХреЛ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдП




рд░реЗрд▓реЗрдВ? рдирд╣реАрдВ!


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

рд╕рдорд╛рдзрд╛рди: async- рд░реЗрд▓


рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╕рдорд╛рдзрд╛рди рд░реЗрд▓ рдЗрдВрдЬрди рдФрд░ рдПрд╕рд┐рдВрдХреНрд╕-рд░реЗрд▓ рдХрд╛ рдПрдХ рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ

рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдЗрдВрдЬрди рд╣реИ рдЬреЛ #bar рдХреНрд░рд┐рдпрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд FooController рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ:
module MyEngine class FooController < ::ApplicationController def bar render the: text => "Your text is #{params[:text]}" end end end 


рдЬреЗрдордлрд╛рдЗрд▓ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ:
 gem 'thin' # yes, we're going to use thin! gem 'rack-fiber_pool', :require => 'rack/fiber_pool' # async http requires gem 'em-synchrony', :git => 'git://github.com/igrigorik/em-synchrony.git', :require => 'em-synchrony/em-http' gem 'em-http-request',:git => 'git://github.com/igrigorik/em-http-request.git', :require => 'em-http' gem 'addressable', :require => 'addressable/uri' 


рдФрд░ config.ru рдореЗрдВ рдпрд╣ рд▓рд╛рдЗрди:
 ... use Rack::FiberPool # <--   run HmvcTest::Application 


рдФрд░ рдпрд╣рд╛рдБ рдпрд╣ config / application.rb рдореЗрдВ рд╣реИ:
 ... config.threadsafe! # <--   end end 


рдЕрдм рд╣рдо FooController рдореЗрдВ рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдХреЗ рдХрд┐рд╕реА рднреА рд╣рд┐рд╕реНрд╕реЗ рд╕реЗ рдЕрдиреБрд░реЛрдз рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
 class HomeController < ApplicationController def index http = EM::HttpRequest.new("http://localhost:3000/foo/bar?text=#{params[:a]}").get render :text => http.response end end 


рдЕрдм рд╕рд░реНрд╡рд░ рд╢реБрд░реВ рдХрд░реЗрдВ:
 this start 


рдФрд░ рдЦреЛрд▓реЗрдВ http: // localhost: 3000 / рд╣реЛрдо / рдЗрдВрдбреЗрдХреНрд╕? = рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдПрдЪрдПрдорд╡реАрд╕реА :


рд░реЗрд▓ рд▓реЙрдЧ рдореЗрдВ рд╣рдореЗрдВ рдорд┐рд▓рддрд╛ рд╣реИ:
Started GET "/home/index?a=HMVC" for 127.0.0.1 at 2012-02-03 15:27:02 +0400
Processing by HomeController#index as HTML
Parameters: {"a"=>"HMVC"}

Started GET "/foo/bar?text=HMVC" for 127.0.0.1 at 2012-02-03 15:27:02 +0400
Processing by FooController#index as HTML
Parameters: {"text"=>"HMVC"}
Rendered text template (0.0ms)
Completed 200 OK in 1ms (Views: 0.6ms | ActiveRecord: 0.0ms)

Rendered text template (0.0ms)
Completed 200 OK in 6ms (Views: 0.4ms | ActiveRecord: 0.0ms)


рд╣рдордиреЗ рдПрдХ рдЕрдиреБрд░реЛрдз рджреВрд╕рд░реЗ рдХреЗ рдЕрдВрджрд░ рдХрд┐рдпрд╛ред рд╕рдм рдХреБрдЫ рдареАрдХ рд▓рдЧрдиреЗ рд▓рдЧрд╛ рд╣реИ!

рд╕рдорд╕реНрдпрд╛рдУрдВ


рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рдХрдИ рдиреБрдХрд╕рд╛рди рд╣реИрдВ:


рд╕рдВрджрд░реНрдн


  1. рд╕реИрдо рдбреА FreThe рджреНрд╡рд╛рд░рд╛ HMVC рд▓реЗрдЦ рдХреЗ рд╕рд╛рде рд╕реНрдХреЗрд▓рд┐рдВрдЧ рд╡реЗрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧ
  2. https://github.com/igrigorik/async-rails

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


All Articles