рдПрди 2 рдУ: рдПрд░рд▓рд╛рдВрдЧ рд╡реЗрдмрд╕реНрдХреЗрдЯ рд╡реЗрдм рдлреНрд░реЗрдорд╡рд░реНрдХ

рдПрди 2 рдУ рдПрд░рд▓рдВрдЧ рдлреНрд░реЗрдорд╡рд░реНрдХ

рдкрд░рд┐рдЪрдп


рдпрд╣ рдкреЛрд╕реНрдЯ рд░реВрд╕реА рдореЗрдВ N2O рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫрд╛ рдкрд░рд┐рдЪрдп рджреЗрддрд╛ рд╣реИред

Erlang / OTP рд╡реЗрдм рдлреНрд░реЗрдорд╡рд░реНрдХ N2O рдХреНрдпрд╛ рд╣реИ рдФрд░ рд╡реЗрдм рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХреА рдЪрд┐рдк рдХреНрдпрд╛ рд╣реИ, рдЖрдк рдкреГрд╖реНрда рдкрд░ github рдФрд░ SynRC рдХреА рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ ред рд╕рдм рдХреБрдЫ рд╡рд╣рд╛рдБ рд╣реИ рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рд░реЗрдЦрд╛рдВрдХрди рдФрд░ рдкреНрд░рд╕реНрддреБрддрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВред

рдФрд░ рдпрд╣рд╛рдВ рд╣рдо рд░реВрдкрд░реЗрдЦрд╛ рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ рдФрд░ рд╢рд╛рд╢реНрд╡рдд рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рддреЗ рд╣реИрдВред

N2O рдХрд╛ рдорд╛рдирд╛ рд╕рдВрд╕реНрдХрд░рдг: 1.1.0
рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдкрд░рд┐рдгрд╛рдо рджреЗрдЦрдирд╛ рд╣рдореЗрд╢рд╛ рдЕрдзрд┐рдХ рджрд┐рд▓рдЪрд╕реНрдк рд╣реЛрддрд╛ рд╣реИ; рдореИрдВ рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдкрд╣рд▓реЗ рдЕрдкрдиреЗ рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ рдПрди 2 рдУ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рд╣реА рдЗрдирдХреА рд╕реВрдЪрдирд╛ рджреЗрдВред рдЗрддрдирд╛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗред

рдЖрдк рдЕрдкрдиреЗ рд╕рд╡рд╛рд▓реЛрдВ рдХреЗ рдЬрд╡рд╛рдм рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ FreeNode.net рдкрд░ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ IRC # n2o рдЪреИрдирд▓ рдкрд░ рд╕рд┐рдлрд╛рд░рд┐рд╢реЗрдВ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред

рдЗрдВрд╕реНрдЯрд╛рд▓реЗрд╢рди


рдпрджрд┐ рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдирд╣реАрдВ рд╣реИ, рддреЛ рдПрд░реНрд▓рд╛рдВрдЧ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВред рдХреА рд╕реНрдерд╛рдкрдирд╛ рдХреАред

N2O рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ, рд╕рдВрдХрд▓рд┐рдд рдХрд░реЗрдВ рдФрд░ рдЪрд▓рд╛рдПрдВ:

git clone git://github.com/5HT/n2o.git cd n2o/samples make && make console 

рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ: 127.0.0.1:8000/

рдПрди 2 рдУ: рд╕рдлрд╛рд░реА рдореЗрдВ рдПрд░рд▓рд╛рдВрдЧ рд╡реЗрдм рдлреНрд░реЗрдорд╡рд░реНрдХ

рдХрдИ рд╡рд┐рдВрдбреЛ рдЦреЛрд▓рдХрд░ рдЖрдк рдЦреБрдж рд╕реЗ рдЪреИрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдмрд╣реБрдд рд╕рд╛рд░реЗ


рдЖрд▓рд╛

рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдЧреНрд░рд╛рд╣рдХ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рдХрдо рд╡рд┐рд▓рдВрдмрддрд╛ рдХреЗ рд╕рд╛рде рдХреНрд╖реИрддрд┐рдЬ рд░реВрдк рд╕реЗ рд╕реНрдХреЗрд▓реЗрдмрд▓ рд╕рдорд╛рдзрд╛рди рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдСрдирд▓рд╛рдЗрди рдЧреЗрдо, рдЪреИрдЯ, рдЗрдВрд╕реНрдЯрд╛рдЧреНрд░рд╛рдо, рдЯреНрд╡реАрдЯрд░ - рдпрд╣ рд╡рд╣ рдирд╣реАрдВ рд╣реИ рдЬреЛ рдПрд░рд▓рд╛рдВрдЧ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдЬрд╣рд╛рдВ рдПрди 2 рдУ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рд▓рдХрдбрд╝реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ

N2O рдПрдХ рдкреБрди: рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдирд╛рдЗрдЯреНрд░реЛрдЬрди рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╣реИ рдЬреЛ рдереЛрдбрд╝рд╛ рджреБрдЦрдж рд╣реИред N2O рдореЗрдВ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╕рдмрд╕реЗ рддреЗрдЬрд╝ рдХрд╛рдЙрдмреЙрдп рд╡реЗрдм рд╕рд░реНрд╡рд░ рд╣реИ, рдЬреЛ WebSockets рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЬрд╣рд╛рдБ рднреА рд╕рдВрднрд╡ рд╣реЛ, рдмрд╛рдЗрдирд░реА рдбреЗрдЯрд╛ рдХрд╛ рдЖрджрд╛рди-рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, HTML рдФрд░ DTL рдЯреЗрдореНрдкрд▓реЗрдЯ, рддреГрддреАрдп-рдкрдХреНрд╖ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреА рдПрдХ рдиреНрдпреВрдирддрдо рд░рд╛рд╢рд┐ред

Erlang рд╡реЗрдм рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреА рддреБрд▓рдирд╛ рдпрд╣рд╛рдВ рджреЗрдЦреА рдЬрд╛ рд╕рдХрддреА рд╣реИ ред

рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛:

рд╕рд┐рдВрдХ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЦреБрд▓реЗ рд╕рддреНрд░реЛрдВ рдХреЗ рдиреБрдХрд╕рд╛рди рдХреЗ рдмрд┐рдирд╛ рднреА рдПрди 2 рдУ рдордХреНрдЦреА рдкрд░ рд╕рдВрдХрд▓рди рдХрд╛ рд╕рдВрдХрд▓рди рдХрд░рддрд╛ рд╣реИред рд╡рд┐рдХрд╛рд╕ рдФрд░ рдЕрдзрд┐рдХ рдорд╛рдирд╡реАрдп рд╣реЛрддрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред
рд╕рд┐рдВрдХ рдХреЗ рд╕рд╛рде, рдЖрдк рдЬрд░реНрдХрд┐рдВрдЧ (рдЯреНрд░рд╛рдВрд╕) рдХреЗ рдмрд┐рдирд╛ рдХреЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ред

рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рд╕рд╛рде рд╕рд░реНрд╡рд░ рдбреЗрдЯрд╛ рдПрдХреНрд╕рдЪреЗрдВрдЬ рдХреЛ рд╡реЗрдмрд╕реЙрдХреЗрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рдиреНрдпреВрдирддрдо рдУрд╡рд░рд╣реЗрдб рд╣реЛрддрд╛ рд╣реИред рдкреНрд░реЗрд╖рд┐рдд рдбреЗрдЯрд╛ рдХреЗ рд╕рдВрднрд╛рд╡рд┐рдд рдкреНрд░рд╛рд░реВрдк:

рд╡реЗрдм рдХреЗ рд▓рд┐рдП рдХреНрд▓рд╕реНрдЯрд░рд┐рдВрдЧ рдФрд░ рдЧрд▓рддреА рд╕рд╣рд┐рд╖реНрдгреБрддрд╛ рдЕрдм рд╡рд┐рдХрд╛рд╕ рдХреА рдЕрдзрд┐рдХрддрдо рдЖрд╕рд╛рдиреА рдХреЗ рд╕рд╛рде, рдкрд╣рд▓реЗ рд╕реЗ рдХрд╣реАрдВ рдЕрдзрд┐рдХ рд╕реБрд▓рдн рд╣реИред
_5HT: рддреЛ рдЖрдк ___ cya рдирд╣реАрдВ рдХрд░рддреЗред рдЖрдкрдХрд╛ рд╡реНрдпрд╡рд╕рд╛рдп рдХреНрд▓реИрдХ-рдХреНрд▓реИрдХ рдФрд░ рдЙрддреНрдкрд╛рджрди рдореЗрдВ рд╣реИ


BEHAVIOR рдореЙрдбрд▓

N2O рдореИрд╕реЗрдЬрд┐рдВрдЧ рдкрд░ рд╣реА Erlang рдХреА рддрд░рд╣ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рди рдХреЗрд╡рд▓ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реЗ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рддрдХ, рдмрд▓реНрдХрд┐ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реЗ рд╕рд░реНрд╡рд░ рддрдХред рдореИрдВ рдЗрд╕реЗ рдПрдХ рдЗрд╡реЗрдВрдЯ рдореЙрдбрд▓ рдХрд╣реВрдВрдЧрд╛ред

рдЖрдЗрдП рд╣рдо рдПрди 2 рдУ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдЙрджрд╛рд╣рд░рдг n2o_sample рдХреА рд╕рдордпрд░реЗрдЦрд╛ рдХрд╛ рд╡рд░реНрдгрди рдХрд░реЗрдВред
  1. рдЬрдм /index рдкреЗрдЬ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ HTML index:body() рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╣реИ, index:body() рдлрд╝рдВрдХреНрд╢рди рдореЗрдВред
  2. рдкреЗрдЬ WebSocket рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрдиреЗрдХреНрд╢рди рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рддреЗ рд╣реБрдП рдЪрд▓рддрд╛ рд╣реИред
  3. рдлрд┐рд░ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб рдХреЗ рд░реВрдк рдореЗрдВ рдкреЗрд▓реЛрдб рдХреЛ WebSocket рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░реЗрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдкреГрд╖реНрда рддрддреНрд╡реЛрдВ рдХреЛ index:event(init) рдорд╛рдзреНрдпрдо рд╕реЗ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдЖрд░рдВрдн рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣рд╛рдВ, рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреА рднреВрдорд┐рдХрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬреЗрдПрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд░ рдПрдХ рдмрдЯрди рдХреЗ рд▓рд┐рдП рдПрдХ рдШрдЯрдирд╛ рдмрдирд╛рдирд╛ рдЬреЛ рд╕рд░реНрд╡рд░ рдкрд░ рдХреНрд▓рд┐рдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рднреЗрдЬрддрд╛ рд╣реИред
  4. рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдмреЗрд╕ -64 рдорд╢рд░реВрдо рдХреЗ рдиреАрдЪреЗ рдПрдХ рдмрд░реНрдЯ-рдПрдиреНрдХреЛрдбреЗрдб рд╕рдВрджреЗрд╢ рдЖрддрд╛ рд╣реИ рдФрд░ index:event(Term) рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ Term рдмрдЯрди рдХреЗ рд░рд┐рдХреЙрд░реНрдб рдлрд╝реАрд▓реНрдб рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╢рдмреНрдж рд╣реИ: #button.postback ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдмрдЯрди #button{postback=sasay} рдмрдЯрди #button{postback=sasay} рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж index:event(sasay). рдХреЛ рдмрд▓ рджреЗрдЧрд╛ index:event(sasay). рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ index:event(sasay).
  5. рд╕рд░реНрд╡рд░, рдмрджрд▓реЗ рдореЗрдВ, рдХрд┐рд╕реА рднреА рд╕рдордп рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЛ рдбреЗрдЯрд╛ рднреЗрдЬ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рдбреЗрдЯрд╛ рдХреЛ рдХрд┐рд╕реА рдЕрдиреНрдп рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реЗ рднреЗрдЬрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рддреЛ рд╢рд░реНрддреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП: index:event(init) рдХреНрд▓рд╛рдЗрдВрдЯ (рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЯреИрдм) рдХреА рд╕реЗрд╡рд╛ рдХрд░рдиреЗ рд╡рд╛рд▓реА рдореБрдЦреНрдп рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ wf:reg/1 рд╕рд╛рде рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдирд╛рдо рдХреЗ рддрд╣рдд рдкрдВрдЬреАрдХреГрдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдЕрдВрдд рдХреЗ рдмрд╛рдж рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдкреГрд╖реНрда рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдЙрддреНрдкрдиреНрди рдХрд░рдирд╛ ( wf:insert/2 , wf:wire/1 , рдЖрджрд┐), wf:flush/1 рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдЕрдкрдбреЗрдЯ рдХреЛрдб рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬрд╣рд╛рдВ рдЗрд╕реЗ рддрдм JS рдорд╢реАрди рджреНрд╡рд╛рд░рд╛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред


рдкрд╣рд▓реА рдмрд╛рдд рдЬреЛ рджрд┐рдорд╛рдЧ рдореЗрдВ рдЖрддреА рд╣реИ, рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рдкреГрд╖реНрда рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рд╛рде рдПрдХ рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдирд╣реАрдВ рдмрджрд▓рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рд░реНрд╡рд░ рд╕реЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдкрд░ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИред

рдФрд░ рдпрд╣ AJAX рдФрд░ LongPooling рдзреВрдордХреЗрддреБ рдЬреИрд╕реА рдмреИрд╕рд╛рдЦреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛ рдПрдХ рд╡реЗрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдореВрд▓ рдЗрдВрдЯрд░реИрдХреНрдЯрд┐рд╡ рдореЛрдб рд╣реИред рднрд╡рд┐рд╖реНрдп рдпрд╣рд╛рдБ рд╣реИ, рдмрд┐рд▓реНрд▓реА рдХреЗ рдмрдЪреНрдЪреЗред рдЗрд╕рдХрд╛ рдирд╛рдо WebSockets рд╣реИред

рдЖрдк рдпрд╣рд╛рдБ WS рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рддрд╛рд▓рд┐рдХрд╛ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдпрд╣рд╛рдБ рдЕрдкрдиреЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреА рдЬрд╛рдБрдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ред

рдЖрд╡реЗрджрди рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА


рдпрджрд┐ рдПрд░реНрд▓реИрдВрдЧ рдХреЗ рд╕рд╛рде рдкрд░рд┐рдЪрд┐рдд рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдпрд╛ рдЕрднреА рд╣реБрдЖ рд╣реИ, рддреЛ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╕рд╡рд╛рд▓ рдЙрдареЗрдВрдЧреЗ: рдЖрдкрдХреА рд░рдЪрдирд╛рддреНрдордХрддрд╛ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛рдВ рдФрд░ рдХрд┐рд╕ рд╕реНрдерд╛рди рдкрд░ рдЭреВрда рд╣реИред

рдЫрд╡рд┐

рд╕рдВрдкрд╛рджрди рдХреЗ рдЕрдзреАрди рд╣реЛ рд╕рдХрдиреЗ рд╡рд╛рд▓реЗ рдлрд╝реЛрд▓реНрдбрд░ рдФрд░ рдлрд╝рд╛рдЗрд▓реЗрдВ рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд┐рдП рдЧрдП рд╣реИрдВред рдкреНрд░рдореБрдЦ рднрд╛рдЧреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред

n2o_sample

N2O рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ - n2o_sample ред n2o_sample рдПрдХ рд╕реНрдЯреИрдВрдбрдЕрд▓реЛрди рдПрд░реНрд▓рд╛рдВрдЧ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╣реИ рдЬреЛ N2O рдкрд░ рдЪрд▓рддрд╛ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдКрдкрд░ рджрд┐рдП рдЧрдП рдЪрд┐рддреНрд░ рдореЗрдВ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣ apps/ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИ - рдпрд╣ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХрд╛ рдПрдХ рд╕рдВрдЧреНрд░рд╣ рд╣реИ, рд╣рдо рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЛ рд╡рд╣рд╛рдВ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдпрджрд┐ рдЖрдкрдХреЛ n2o_sample рдХреЛ рджреЛ рдпрд╛ рдЕрдзрд┐рдХ рд╕реНрд╡рддрдВрддреНрд░ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

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

рдЖрд╡реЗрджрди рд╕реВрдЪреА

рдЬрдм n2o_sample рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣, рдЬреИрд╕рд╛ рдХрд┐ рдПрд░рд▓реИрдВрдЧ рдЖрд╡реЗрджрди рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ, рд╡рд╣ рд╕рднреА рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЗрд╕ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ ( deps/ рд╕реЗ рдирд┐рд░реНрднрд░рддрд╛ deps/ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛-рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╡реНрдпрдХреНрддрд┐, рдпрджрд┐ рдХреЛрдИ рд╣реЛ, apps/ рд╕реЗ)ред рдпрд╣ рдХреЛрдб n2o_sample/src/web_app.erl :

 -module(web_app). -behaviour(application). -export([start/2, stop/1]). start(_StartType, _StartArgs) -> application:start(crypto), application:start(sasl), application:start(ranch), application:start(cowboy), application:start(gproc), application:start(mimetypes), application:start(syntax_tools), application:start(compiler), application:start(erlydtl), application:start(rest), application:start(n2o), web_sup:start_link(). stop(_State) -> ok. 


web_sup:start_link() рдлрд╝рдВрдХреНрд╢рди web_sup:start_link() рд╕реНрд╡рдпрдВ n2o_sample рдкреНрд░рд╛рд░рдВрдн рдХрд░рддрд╛ рд╣реИред

рд▓реЗрдХрд┐рди рдЕрдЧрд░ рд╣рдо рдирд┐рд░реНрднрд░рддрд╛ рдХреА рдЗрд╕ рд╕реВрдЪреА рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдпрд╣ рдЬрд╛рдирдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдЖрд╡реЗрджрдиреЛрдВ рдХреА рдЧрдгрдирд╛ рдХреЗ рд╕рд╛рде рдпрд╣ рдПрдХрдорд╛рддреНрд░ рдЬрдЧрд╣ рдирд╣реАрдВ рд╣реИред рдЖрдкрдХреЛ рджреЛ рдФрд░ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рднреА рдареАрдХ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ: reltool.config рдФрд░ .applist , рдХрдВрд╕реЛрд▓ рдореЗрдВ рдкрд╣рд▓реЗ рдореЗрдХ рдХрдорд╛рдВрдб рдХреЗ рдмрд╛рдж рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рдПрдХ рд╣реА рдЪреАрдЬ рдХреЛ рддреАрди рд╕реНрдерд╛рдиреЛрдВ рдкрд░ рд░рдЦрдирд╛ @ darkproger рд╕реЗ рдПрдХ рдЕрд╕реНрдерд╛рдпреА рдмреИрд╕рд╛рдЦреА рд╣реИ, рд▓реЗрдХрд┐рди рдЙрд╕рдиреЗ рд╕рдм рдХреБрдЫ рдареАрдХ рдХрд░рдиреЗ рдХрд╛ рд╡рд╛рджрд╛ рдХрд┐рдпрд╛ (рд╡реЗ рд╡рд╛рджрд╛ рдХрд┐рдП рдЧрдП рддреАрди рд╕рд╛рд▓ рдЗрдВрддрдЬрд╛рд░ рдХрд░реЗрдВрдЧреЗ )ред

sys.config

рдпрд╣ рд╕рднреА рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ рдмрдЪрд╛рддрд╛ рд╣реИред рдПрдХ рдлрд╛рдЗрд▓ рдореЗрдВред рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХред рдлрд┐рд░ рдХреЛрдб рд╕реЗ рд╣рдо application:get_env(App,Key) рдХреЙрд▓ рдХрд░рддреЗ application:get_env(App,Key) рдФрд░ рд╡рд╣ рд╣реИред

vm.args

рдпрд╣рд╛рдВ рдЖрдк рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ ( $ export SOME_PARAM=value рдмрдЬрд╛рдп) рдХреЗ рд▓рд┐рдП рдХреБрдВрдЬреА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдирд┐рдЬреА / рд╕реНрдерд┐рд░ /

рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ "рд╕реНрдерд┐рд░" рдлрд╝рд╛рдЗрд▓ рдХреНрд▓реАрдирд░ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдЙрдмреЙрдп рд╡реЗрдм рд╕рд░реНрд╡рд░ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░ рджрд┐рдпрд╛ред рдпрд╣рд╛рдВ рдЖрдк рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб, рдкрд┐рдХрдЪреА рдФрд░ рд╣реЗрдВрддрд╛рдИ рдЕрдкрд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред n2o_sample/src/web_sup.erl :

 dispatch_rules() -> cowboy_router:compile( [{'_', [ {"/static/[...]", cowboy_static, {priv_dir, ?APP, <<"static">>, [{mimetypes,cow_mimetypes,all}]}}, **** 


рдкреГрд╖реНрдареЛрдВ


рдбрд╛рдпрдиреЗрдорд┐рдХ рдкреЗрдЬ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, N2O рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ HTML рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ DTL рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд░рдирд╛ рд╕рдВрднрд╡ рдмрдирд╛рддрд╛ рд╣реИред deps/erlydtl/ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдПрдХ ErlyDTL рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╣реИ рдЬреЛ Erlang bytecode рдореЗрдВ DTL рдЯреЗрдореНрдкреНрд▓реЗрдЯ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдЯреЗрдореНрдкреНрд▓реЗрдЯ рд╕реНрд╡рдпрдВ n2o_sample/priv/templates/ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИрдВ рдФрд░ HTML рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рддрд░рд╣ рджрд┐рдЦрддреЗ рд╣реИрдВ, рдЬреЛ рджреЛрд╣рд░реЗ рдШреБрдВрдШрд░рд╛рд▓реЗ рдмреНрд░реЗрд╕рд┐рдЬрд╝ {{ }} рдореЗрдВ рд╕рдВрд▓рдЧреНрди рд╢рдмреНрджреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдмрд╛рд╣рд░реА рдбреЗрдЯрд╛ рд╕реНрд░реЛрддреЛрдВ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рддреЗ рд╣реИрдВред

рдЗрд╕ рддрд░рд╣, рд╣рдо HTML рд▓реЗрдЖрдЙрдЯ рдХреЛ рд╕реНрдереИрддрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд╕рд╛рде "рдЗрдВрдЬреЗрдХреНрдЯ" рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдХрдиреЗрдХреНрд╢рди {{ }} рдорд╛рдзреНрдпрдо рд╕реЗ Erlang рдореЗрдВ рдХреЛрдб рдХреЛ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд▓реЙрдЧрд┐рди рдХреЗ рдореБрдЦреНрдп рднрд╛рдЧ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ: рдореБрдЦреНрдп / 0 рдлрд╝рдВрдХреНрд╢рди, рдЬреЛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЛ рдкреГрд╖реНрда рдХреА рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕реНрдерд┐рддрд┐ рджреЗрддрд╛ рд╣реИ рдЬрдм рд╡рд╣ рдкрддреЗ рдкрд░ рдЬрд╛рддрд╛ рд╣реИ http://127.0.0.1/login/ :

 #dtl{ file = "login", app=n2o_sample, bindings=[ {title,title()}, {body,body()} ]}. 




рдШрдЯрдирд╛рдПрдБ


рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд░ рдПрди 2 рдУ рдореЗрдВ рдбреЗрдЯрд╛ рдПрдХреНрд╕рдЪреЗрдВрдЬ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ /deps/n2o_scripts/n2o/bullet.js (WebSocket рдХрдиреЗрдХреНрд╢рди рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рдирд╛) рдФрд░ n2o.js (рдкреЗрдЬреЛрдВ рдкрд░ рдЕрдкрд▓реЛрдб рдХрд┐рдП рдЧрдП рдбреЗрдЯрд╛ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдирд╛)ред

рд╕рд░реНрд╡рд░ рд╕рд╛рдЗрдб рдкрд░, рдПрдВрдбрдкреЙрдЗрдВрдЯ рд╣реИрдВ: /n2o/src/endpoints/cowboy/bullet_handler.erl (рдПрдХ n2o_bullet.erl рдХрдиреЗрдХреНрд╢рди рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рдирд╛) рдФрд░ n2o_bullet.erl (рдбреЗрдЯрд╛ рдПрдХреНрд╕рдЪреЗрдВрдЬ)ред

рдПрдкреАрдЖрдИ


рдЖрдЗрдП рдореБрдЦреНрдп рдПрдкреАрдЖрдИ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВ рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдПрди 2 рдУ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реЛрдиреЗ рдкрд░ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рд╡рд╛рд▓ рдЙрдарддреЗ рд╣реИрдВред

wf: рдзреВрдордХреЗрддреБ / 1, wf: async / 1, wf: async / 2

global:register_name/2 рдорд╛рдзреНрдпрдо рд╕реЗ рдиреЛрдб рдХреЗ рднреАрддрд░ рдПрдХ рдЕрджреНрд╡рд┐рддреАрдп рдирд╛рдо ( comet/1 рдФрд░ async/1 ) рдХреЗ рд▓рд┐рдП тАЬcometтАЭ рддрд╣рдд рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ global:register_name/2 ред рдпрджрд┐ рдкрд╣рд▓реЗ рд╕реЗ рдкрдВрдЬреАрдХреГрдд рд╣реИ, рддреЛ рдЙрд╕рдХрд╛ рдкреАрдЖрдИрдбреА тАЛтАЛрд╡рд╛рдкрд╕ рдХрд░реЗрдВред

wf: рдлреНрд▓рд╢ / 1

рдпрд╣ wf_context:actions/0 рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╡рд░реНрддрдорд╛рди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреА рд╢реИрд▓реА рдореЗрдВ рдкреГрд╖реНрда рдХреЗ рд▓рд┐рдП рд╕рд╣реЗрдЬреЗ рдЧрдП рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рд▓реЗрддрд╛ рд╣реИ рдФрд░ рдЙрдиреНрд╣реЗрдВ wf:send/2 рдорд╛рдзреНрдпрдо рд╕реЗ рднреЗрдЬрддрд╛ рд╣реИ wf:send/2 рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ wf:send/2 (рдиреЛрдб рдХреЗ рднреАрддрд░) wf:send/2 , рдЬрд┐рд╕рдХрд╛ рдирд╛рдо рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

wf: reg / 1, wf: reg / 2 (? REGISTRATOR = n2o_mq)

GProc рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдиреЛрдб рдХреЗ рднреАрддрд░ рдПрдХ рдЧреИрд░- рдЕрджреНрд╡рд┐рддреАрдп рдирд╛рдо рдХреЗ рддрд╣рдд рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░реЗрдВред рдПрдХ рд╣реА рдирд╛рдо рдХреЗ рддрд╣рдд GProc рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрдВрдЬреАрдХреГрдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдкрдВрдЬреАрдХрд░рдг рдХреА рд╕реНрдерд┐рддрд┐ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реИ ( get/1 , put/1 ) рдФрд░ рд╢рдмреНрдж skip ( n2o_mq.erl ) рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдЧреАред Gproc рджреНрд╡рд╛рд░рд╛ рд░реВрд╕реА рдореЗрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рдЬрд╛рдирдХрд╛рд░реА рдпрд╣рд╛рдБ ред

рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд▓рдХрдбрд╝рд╣рд╛рд░рд╛ n2o_mq рдореЙрдбреНрдпреВрд▓ рд╣реИ n2o_mq рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдкреБрдирд░реНрдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреНрд▓рд╕реНрдЯрд░ рдХреЗ рднреАрддрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ред

wf: send / 2 (! REGISTRATOR = n2o_mq)

рдлрд╝рдВрдХреНрд╢рди рдХреЛ рджрд┐рдП рдЧрдП рд╕рдВрджреЗрд╢ рдХреЛ wf:reg/1 рдпрд╛ wf:reg/2 рдорд╛рдзреНрдпрдо рд╕реЗ рдкрдВрдЬреАрдХреГрдд рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рджреВрд╕рд░реЗ рддрд░реНрдХ рдХреЗ рд╕рд╛рде рднреЗрдЬ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

wf: q / 1

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рддрдерд╛рдХрдерд┐рдд рдкреЛрд╕реНрдЯрдмреИрдХ рддрддреНрд╡реЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реЗ рдкреНрд░реЗрд╖рд┐рдд рдбреЗрдЯрд╛ рдХреЛ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ:

 body() -> [ #textbox{ id=message }, #button{ postback={button_pressed}, source=[message] } ]. event({button_pressed}) -> wf:info("Message: ~p",[wf:q(message)]); 

рдХрдВрд╕реЛрд▓ рдкрд╛рда рдмреЙрдХреНрд╕ рдореЗрдВ рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдХреЗ рд╕рдордп рдирд┐рд╣рд┐рдд рдкрд╛рда рдХреЛ рдкреНрд░рд┐рдВрдЯ рдХрд░реЗрдЧрд╛ред

wf: qs / 1

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, HTTP рдлрд╝реЙрд░реНрдо рд╕реЗ рдкреИрд░рд╛рдореАрдЯрд░ рдирд┐рдХрд╛рд▓рддрд╛ рд╣реИ:
wf:qs(<<"x">>) рдирд┐рдХрд╛рд▓реЗрдЧрд╛ <<"ABC">> рдЕрдЧрд░ URL рд╣реЛрдЧрд╛ localhost:8000/index?x=ABC localhost:8000/index?x=ABC ред

wf: рддрд╛рд░ / рез

рдпрд╣ /n2o/include/wf.hrl рдлрд╝рд╛рдЗрд▓ рдХреЗ "рдХрд╛рд░реНрдп" рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рдШреЛрд╖рд┐рдд рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкрд╛рда рдФрд░ рдШрдЯрдирд╛ рд░рд┐рдХреЙрд░реНрдб рджреЛрдиреЛрдВ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП: wf:wire(#alert{text="!"}) ред рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ #wire{actions=JS} рдореЗрдВ рднреА рд▓рдкреЗрдЯрд╛ рдЬрд╛рдПрдЧрд╛, рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк wf:wire(#wire{sctions=JS}) рдирд┐рд░реНрдорд╛рдг рд╣реЛрдЧрд╛ред

wf: update / 2, wf: insert_top / 2, wf: remove / 1 рдФрд░ рдЕрдиреНрдп

рдпреЗ wf:wire/1 рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓реЗ рд╣реИрдВ wf:wire/1 , рдЬрд┐рд╕рдореЗрдВ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ DOM рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб рднреА рд╢рд╛рдорд┐рд▓ рд╣реИред

wf: рдЬрд╛рдирдХрд╛рд░реА, wf: рдЪреЗрддрд╛рд╡рдиреА, wf: рддреНрд░реБрдЯрд┐

рдпреЗ рдРрд╕реЗ рдлрд╝рдВрдХреНрд╢рдВрд╕ рд╣реИрдВ, рдЬрд┐рдиреНрд╣реЗрдВ рдХреНрд░рдорд╢рдГ error_logger:info_msg/1 рдФрд░ рдЕрдиреНрдп рдХреЗ рдмрдЬрд╛рдп рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА error_logger:info_msg/1 рдХреА error_logger:info_msg/1 рд╣реИред

wf: f, wf: to_list, wf: to_binary, wf: html_encode, wf: url_encode, wf: hex_encode рдФрд░ рдЕрдиреНрдп

рд╡реЗ /n2o/src/wf.erl рдлрд╝рд╛рдЗрд▓ рдХреЗ "рдХрдиреНрд╡рд░реНрдЯ рдФрд░ /n2o/src/wf.erl рдПрдкреАрдЖрдИ" /n2o/src/wf.erl рд╣реИрдВред рд╡реЗ рд╕рднреА рдорд╛рдирдХ Erlang рдлрд╝рдВрдХреНрд╢рди рдкрд░ рдПрдб-рдСрди рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЕрдзрд┐рдХ рдмреБрджреНрдзрд┐рдорд╛рди рдФрд░ рдЗрддрдиреА рд▓рдХрдбрд╝реА рдирд╣реАрдВред wf:f - io_lib:format рдХрд╛ рдПрдХ рдПрдирд╛рд▓реЙрдЧ io_lib:format , рдлрд┐рд░ рдХрдирд╡рд░реНрдЯрд░ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреА рд╕реВрдЪреА рдкрд░ рдЬреЛ рдХрд┐рд╕реА рднреА рд╢рдмреНрдж рдХреЛ рдЗрдирдкреБрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ, рдлрд┐рд░ рдЕрдзрд┐рдХ рд╡реЗрдм-рд╡рд┐рд╢рд┐рд╖реНрдЯ рдлрд╝рдВрдХреНрд╢рдиред рдпрд╣рд╛рдБ рдЙрди рд╕рднреА рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИ; рд▓рдХреНрд╖реНрдп рдХреЗрд╡рд▓ рдпрд╣ рджрд┐рдЦрд╛рдирд╛ рдерд╛ рдХрд┐ рд╡реЗ рдореМрдЬреВрдж рд╣реИрдВред

wf: рдЕрдЪрд╛рд░ / 1, wf: depickle / 1 (? PICKLER = n2o_pickle)

рдХреНрд▓рд╛рдЗрдВрдЯ рдФрд░ рд╕рд░реНрд╡рд░ рдХреЗ рдмреАрдЪ рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдПрдирдХреЛрдбрд░ рдФрд░ рдбрд┐рдХреЛрдбрд░ рдХреА рд╢рд░реНрддреЗрдВред n2o_pickle Base64 рдореЗрдВ рдПрдирдХреЛрдб рдХрд░рддрд╛ рд╣реИ, рдЬрдмрдХрд┐ n2o_secret AES / RIPEMD160 рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдХреБрдВрдЬреА рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред

рдпрд╣ рд╕рдм рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рд╣реИ, рдЕрддрд┐рд░рд┐рдХреНрдд рдЬрд╛рдирдХрд╛рд░реА рдПрди 2 рдУ рдПрдкреАрдЖрдИ рдХреЗ рд▓рд┐рдП рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдЧреЛрджреА рдореЗрдВ рдкрд╛рдИ рдЬрд╛ рд╕рдХрддреА рд╣реИ ред

рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп


рдиреАрдЪреЗ рд╕реВрдЪреАрдмрджреНрдз рдореБрдлреНрдд SynRC рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рдЙрддреНрдкрд╛рдж рд╣реИрдВ рдЬреЛ рдЖрдкрдХреЗ Erlang рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рдЙрддреНрдкрд╛рджрди рдХреЛ рдЙрддреНрдкрд╛рджрди рдореЗрдВ рджрд╕ рдЧреБрдирд╛ рдмрдврд╝рд╛ рд╕рдХрддреЗ рд╣реИрдВред

рдХреЗрд╡реАрдПрд╕

KVS рдПрдХ рдЕрдореВрд░реНрдд KV рдиреЛрдПрд╕рдХреНрдпреВрдПрд▓ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЙрдбрд▓ рд╣реИ рдЬреЛ рджреЛрдЧреБрдиреА рдЬреБрдбрд╝реА рд╕реВрдЪрд┐рдпреЛрдВ рдФрд░ рджреНрд╡рд┐рддреАрдпрдХ рдЕрдиреБрдХреНрд░рдорд┐рдд ( kvs:index/3 ) рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреЛ рдлреАрдб рдХрд░ рд╕рдХрддрд╛ рд╣реИред рд╡рд░реНрддрдорд╛рди рдореЗрдВ, рдпрд╣ рдорд╛рдиреЗрд╕рд┐рдпрд╛, рдЖрд░рдЖрдИрдПрдХреЗ рдФрд░ рдХреЗрдПрдЖрдИ рдХреЗ рд╕рд╛рде рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

AVZ

рдПрд╡реАрдЬреЗрдб рдЯреНрд╡рд┐рдЯрд░, рдЧреВрдЧрд▓, рдлреЗрд╕рдмреБрдХ, рдЬреАрдердм рдФрд░ рдорд╛рдЗрдХреНрд░реЛрд╕реЙрдлреНрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдкреНрд░рдгрд╛рд▓реА рд╣реИред

рд╢реЗрди

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

MQS

MQS - RabbitMQ рдХреЗ рд▓рд┐рдП MQ рд▓рд╛рдЗрдмреНрд░реЗрд░реАред

рдлрд╝реАрдб

рдлрд╝реАрдбреНрд╕ - рдХреНрд▓рд╕реНрдЯрд░ рдХреЗ рд╕рднреА рдиреЛрдбреНрд╕ рдкрд░ рдбреЗрдЯрд╛ рд╕реНрдерд┐рд░рддрд╛ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрджреЗрд╢реЛрдВ рдХрд╛ рдПрдХ рдкреВрд▓, рдПрдХ рдХреИрд╢ рд╕рд░реНрд╡рд░ рднреАред

рдХреНрд╖рд┐рддрд┐рдЬ

рд╕реНрдХрд╛рдИрд▓рд╛рдЗрди рдПрди 2 рдУ рдкрд░ рдПрдХ рдСрдирд▓рд╛рдЗрди рд╕реНрдЯреЛрд░ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИред

рдХрд╛рдКрдВрддрд╛рдЪ

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

VOXOZ

VOXOZ - рдПрдХ рдЦреБрд▓рд╛ рдПрд░реНрд▓рд╛рдВрдЧ рдХреНрд▓рд╛рдЙрдб рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо (PaS)ред рдбреЙрдХрд░, рдПрд░реНрд▓рд╛рдВрдЧрдСрдирдПрдХреНрд╕рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП blog.docker.io ред

рдирд┐рд╖реНрдХрд░реНрд╖


рддрд╛рдХрд┐ рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рд╕рдорд╛рди рд░реВрдк рд╕реЗ рдЖрддреНрдорд╕рд╛рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ, рдЕрдм рдХреЗ рд▓рд┐рдП рдмрд╕ рдЗрддрдирд╛ рд╣реАред рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдЪреБрдирдиреЗ рдФрд░ рдирд╛рдЗрдЯреНрд░реЛрдЬрди рдФрд░ рдПрди 2 рдУ рдХреЗ рд▓рд┐рдП рд╕рд▓рд╛рд╣ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП @ mtreskin рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рдзрдиреНрдпрд╡рд╛рдж; рдФрд░ рдЕрдирдВрдд 24/7 рдЖрдИрдЖрд░рд╕реА рдкрд░рд╛рдорд░реНрд╢ рдХреЗ рд▓рд┐рдП @ 5HT ред

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


All Articles