рдЕрдкрдиреЗ рд╕рд░реНрд╡рд░ рдХреЛ рдЦрд░рд╛рдм рдирд╣реАрдВ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реИ

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

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

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

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

рдПрдХ рдордгрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИ:
1. рдлреЗрдп рд░рддреНрди рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ (рдЗрд╕реЗ рдЬреЗрдордлрд╛рдЗрд▓ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ рдФрд░ рдмрдВрдбрд▓ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░реЗрдВ)

2. рдЬреЛрдбрд╝реЗрдВ
require "net/http"

in config / application.rb

рдпрд╣ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╣рд╛рдпрдХ рднреЗрдЬрдиреЗ рд╡рд╛рд▓реЗ рд╕рдВрджреЗрд╢ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ - рд╢рд╛рдпрдж, рдлрд┐рд░ рд╡реЗ рдЗрд╕реЗ рдордгрд┐ рдореЗрдВ рдПрдХреАрдХреГрдд рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЕрдм рдЖрдкрдХреЛ рдЗрд╕реЗ рдЕрдкрдиреЗ рд╣рд╛рдереЛрдВ рд╕реЗ рджрд░реНрдЬ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

3. рдкрд╛рда рдХреЗ рд╕рд╛рде рдПрдХ рдирдИ рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБ
FAYE_TOKEN = "anything"

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

4. рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╣рд╛рдпрдХ рдмрдирд╛рдПрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, application_helper.rb рдореЗрдВ)
def broadcast(channel, &block)
message = {:channel => channel, :data => capture(&block), :ext => {:auth_token => FAYE_TOKEN}}
uri = URI.parse("http://moesuperprilozhenie.ru:9292/faye")
Net::HTTP.post_form(uri, :message => message.to_json)
end


рдпрд╣ рд╕рд╣рд╛рдпрдХ рдХрд┐рд╕реА рднреА рджреГрд╖реНрдЯрд┐ рд╕реЗ рдХрд┐рд╕реА рднреА рддрд░рд╣ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ:
- broadcast "/orders/update" do
$("#orders_list").append("#{escape_javascript render(@orders) }");


5. рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рдЬрдбрд╝ рдореЗрдВ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП faye.ru
require 'faye'
require File.expand_path('../config/initializers/faye_token.rb', __FILE__)

class ServerAuth
def incoming(message, callback)
if message['channel'] !~ %r{^/meta/}
if message['ext']['auth_token'] != FAYE_TOKEN
message['error'] = 'Invalid authentication token'
end
end
callback.call(message)
end
end

faye_server = Faye::RackAdapter.new(:mount => '/faye', :timeout => 45)
faye_server.add_extension(ServerAuth.new)
run faye_server


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

6. рд╕рдВрджреЗрд╢ рд╕рд░реНрд╡рд░ рд╢реБрд░реВ рдХрд░рдирд╛:
rackup faye.ru -s thin -E production


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

7. рдкреЗрдЬ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ:
$(function() {
var faye = new Faye.Client('http://moesuperprilozhenie.ru:9292/faye');
faye.subscribe("/orders/update", function(data) {
eval(data);
});
});


8. рдкреНрд▓рдЧ-рдЗрди javascripts рдХреА рд╕реВрдЪреА рдореЗрдВ faye.js рдЬреЛрдбрд╝реЗрдВ (рд╕рдВрджреЗрд╢ рд╕рд░реНрд╡рд░ рд╕реЗ рд╕реАрдзреЗ рд▓рд┐рдпрд╛ рдЧрдпрд╛, рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ moesuperprilozhenie.ru : 9292 / faye)ред Haml рдЙрджрд╛рд╣рд░рдг:
= javascript_include_tag "http://moesuperprilozhenie.ru:9292/faye.js"


9. рд╣рдо рдирдП-рдкреЗрдВрдЪ рд╡рд╛рд▓реЗ рд╕реЗрд▓реНрдХреЗрд▓реЛрд╡реНрд╕реНрдХреА рдкреНрд░реЛрд╕реЗрд╕рд░ рд▓реЛрдб рдЧреНрд░рд╛рдл рдФрд░ рдЖрдирдВрдж рдХреЛ рдЦреЛрд▓рддреЗ рд╣реИрдВред

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

UPD: рд▓реЗрдЦ рдореЗрдВ рдХреЛрдб Railscast рд╕реЗ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд░рдпрд╛рди рдЗрдЬреНрдЬрдд рдФрд░ рд╕рдореНрдорд╛рди рдкрд╛рддрд╛ рд╣реИред

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


All Articles