Rebar рдФрд░ GProc рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛

рд░реЗрдмрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛





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



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



рдЖрдк рд░реЗрдЧрд░ рдХреЛ hg.basho.com/rebar/downloads/rebar рдкрд░ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдПрдХ рдПрдХрд▓ рдлрд╝рд╛рдЗрд▓ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдХрдИ рдмреАрдо-рдореЙрдбреНрдпреВрд▓ рд╣реИрдВред рдЗрд╕реЗ рдХрд┐рд╕реА рднреА рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╕реНрдерд╛рди рдкрд░ рд░рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ PATH рдирд┐рд╖реНрдкрд╛рджрдирдпреЛрдЧреНрдп рдХреЗ рд▓рд┐рдП рдЦреЛрдЬ рдкрде рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, ~/bin/



or /usr/local/bin/



ред

рдЪрд▓рд┐рдП рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдиреАрдЪреЗ рдЖрддреЗ рд╣реИрдВред

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдПрдХ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдмрдирд╛рдПрдВ рдЬрд┐рд╕рдореЗрдВ рд╣рдорд╛рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реНрдерд┐рдд рд╣реЛрдЧреА ( gpt



) рдФрд░ рдЙрд╕ рдкрд░ рдЬрд╛рдПрдВ:

 $ mkdir gpt && cd gpt




рдЗрд╕рдореЗрдВ, рдПрдХ рдЙрдкрдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдмрдирд╛рдПрдВ рдЬрд╣рд╛рдВ рд╣рдо рдЕрдкрдиреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд╕реНрд░реЛрдд рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╕реАрдзреЗ рд╕рд╣реЗрдЬреЗрдВрдЧреЗ:

 $ mkdir -p apps / gpt && cd apps / gpt




рдЖрд╡реЗрджрди рдХрдВрдХрд╛рд▓ рдмрдирд╛рдирд╛:

 $ rebar рдмрдирд╛рдиреЗ-рдРрдк appid = gpt




рдПрдкрд┐рдб рдкреИрд░рд╛рдореАрдЯрд░ рд╣рдорд╛рд░реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдирд╛рдо рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░, рддрджрдиреБрд╕рд╛рд░, рд╕реНрд░реЛрдд рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рдЙрдкрд╕рд░реНрдЧред

 $ ls -1 src
 gpt_app.erl
 gpt.app.src
 gpt_sup.erl




.App рдлрд╝рд╛рдЗрд▓ ( src/gpt.app.src



) рдХреЗ рд▓рд┐рдП рд░рд┐рдХреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП gproc рдкрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╡рд┐рд╡рд░рдг рдФрд░ рдирд┐рд░реНрднрд░рддрд╛ рдЬреЛрдбрд╝реЗрдВ:

   {рд╡рд┐рд╡рд░рдг, "GProc рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓"},
   ...
   {рдЕрдиреБрдкреНрд░рдпреЛрдЧ,
    [
     рдЧрд┐рд░реА,
     stdlib,
     gproc% <--- рдЕрдиреБрдкреНрд░рдпреЛрдЧ gproc рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ
    ]}
   ...




рд╢реАрд░реНрд╖-рд╕реНрддрд░ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рдПрдВ рдЬрд╣рд╛рдВ рд╣рдорд╛рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реИ, рдЗрд╕рдореЗрдВ rel



subdirectory рдмрдирд╛рдПрдБ рдФрд░ рд╡рд╣рд╛рдВ рдЬрд╛рдПрдВ:

 $ cd ../../
 $ mkdir rel && cd rel




Rel рдореЗрдВ рд░рд┐рд▓реАрдЬрд╝ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдлрд╝рд╛рдЗрд▓реЗрдВ рд╣реЛрдВрдЧреА - рдЬреЛ рдХрд┐ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдЗрд╕рдХреЗ рд╕рднреА рд░рдирдЯрд╛рдЗрдо рдирд┐рд░реНрднрд░рддрд╛рдПрдБред

rebar



рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП rebar



рдиреЛрдб рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ рдЕрдкрдирд╛ рдирд╛рдо рдкрд╛рд╕ рдХрд░рдХреЗ рдиреЛрдб рдХреЗ рд▓рд┐рдП рдПрдХ рд░рд┐рдХреНрдд рдмрдирд╛рдПрдВ:

 $ rebar create-node рдиреЛрдбрд┐рдб = gptnode




reltool.config



рдлрд╝рд╛рдЗрд▓ рдХрд╛ рд╕рдВрдкрд╛рджрди:

   ...
   {lib_dirs, ["../deps", "../apps"atalogatalog,% <--- рдЗрди рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ рдореЗрдВ, reltool рднреА рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдореЗрдВ рдирд┐рд░реНрднрд░рддрд╛ рдХреА рддрд▓рд╛рд╢ рдХрд░реЗрдЧрд╛
   {rel, "gptnode", "1",
    [
     рдЧрд┐рд░реА,
     stdlib,
     SASL,
     gproc,% <--- gproc рдЕрдиреБрдкреНрд░рдпреЛрдЧ
     gpt% <--- рд╣рдорд╛рд░рд╛ рдЖрд╡реЗрджрди
    ]}
   ...




рдЕрдЧрд▓рд╛, рдЖрдк files/vm.args



рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ, рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВ, рдиреЛрдб рдХрд╛ рдирд╛рдо:

 -рдирд╛рдо gptnode@127.0.0.1




рдкрд░

 -sname gptnode @ localhost




рдЖрдЗрдП рд╢реАрд░реНрд╖ рд╕реНрддрд░ рдХреА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рдПрдВ:

 $ cd ../




рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде рдПрдХ rebar.config



рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБ:

 %% рдбрд┐рдкреЗрдВрдбреЗрдВрд╕реА рдпрд╣рд╛рдБ рдкрдбрд╝реЗрдЧреА
 {deps_dir, ["deps"]}ред

 %% рдЙрдкрдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдПрдБ рдЬрд┐рд╕рдореЗрдВ rebar рджрд┐рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП
 {рдЙрдк_рдбрд┐рд░реНрд╕, ["rel", "рдРрдкреНрд╕ / gpt"]}ред

 %% рд╕рдВрдХрд▓рдХ рд╡рд┐рдХрд▓реНрдк
 {erl_opts, [debug_info, fail_on_warning]}ред

 %% рдирд┐рд░реНрднрд░рддрд╛ рд╕реВрдЪреА
 %% рд╕рдВрдмрдВрдзрд┐рдд рдЧрд┐рдЯ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреА рдорд╛рд╕реНрдЯрд░ рдмреНрд░рд╛рдВрдЪ рдХреЛ gproc рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдореЗрдВ рдХреНрд▓реЛрди рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
 {Deps,
  [
   {gproc, "ред *", {git, "http://github.com/esl/gproc.git", "рдорд╛рд╕реНрдЯрд░"}}
  ]}ред




рдЕрдм рд╣рдо рдПрдХ рд░рд┐рд▓реАрдЬ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИрдВред рдЪрд▓реЛ рдХреБрдЫ rebar



рдХрдорд╛рдВрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╣реИрдВ (рдХрдорд╛рдВрдб рдЖрдЙрдЯрдкреБрдЯ рдЫреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИ):

 $ рд░рд┐рдмрд░ рдЧреЗрдЯ-рдбрд┐рдкреНрд╕
 $ рд░рд┐рдмрд░ рд╕рдВрдХрд▓рди
 $ rebar рдЙрддреНрдкрдиреНрди




get-deps



рдХрдорд╛рдВрдб рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рддрд╛ рд╣реИред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ gproc рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╣реИред compile



рдЖрджреЗрд╢ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕рднреА рд╕реНрд░реЛрдд рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдПрдХ рд░рд┐рд▓реАрдЬрд╝ рдмрдирд╛рддрд╛ рд╣реИред

rel/gptnode



рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рджреВрд╕рд░реЗ рд╣реЛрд╕реНрдЯреНрд╕ рдХреЗ рдкрд╛рд╕ рд▓реЗ рдЬрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдЬрд╝рд╛рд╣рд┐рд░ рд╣реИ, рдмрд╛рдЗрдирд░реА рдХрдореНрдкреИрдЯрд┐рдмрд┐рд▓рд┐рдЯреА рдХреЗ рдЕрдзреАрди, рдХреНрдпреЛрдВрдХрд┐ рд░рд┐рд▓реАрдЬрд╝ рдореЗрдВ рдПрд░рд▓рдВрдЧ рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рднреА рд╢рд╛рдорд┐рд▓ рд╣реИ)ред рд░рд┐рд▓реАрдЬрд╝ рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рдж, рдЬреЛ рд╣реБрдЖ рд╡рд╣ рдЪрд▓рд╛рдПрдВ:

 (cd rel / gptnode && sh bin / gptnode рдХрдВрд╕реЛрд▓)




рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЪрд▓ рд░рд╣реЗ рд╣реИрдВ:

 (gptnode @ localhost) 1> рдЖрд╡реЗрджрди: who_applications ()ред
 [{sasl, "SASL CXC 138 11", "2.1.9.2"},
  {gpt, "GProc рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓", "1"},
  {gproc, "GPROC", "0.01"},
  {stdlib, "ERTS CXC 138 10", "1.17.2"},
  {рдХрд░реНрдиреЗрд▓, "ERTS CXC 138 10", "2.14.2"}]




рд╣рдо gpt рдФрд░ gproc рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╡реЗ рдЗрд╕ рд╕реВрдЪреА рдореЗрдВ рд╣реИрдВред

Gproc рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛



рдЗрд╕рд▓рд┐рдП, рд╣рдордиреЗ рдЗрд╕реЗ rebar



рд╕рд╛рде рд▓рдЧрд╛ рд▓рд┐рдпрд╛, рд╕реАрдЦрд╛ рдХрд┐ рдХреИрд╕реЗ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдпрд╛ рдЬрд╛рдП рдФрд░ рдЙрд╕рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд┐рдпрд╛ рдЬрд╛рдПред рдЪрд▓реЛ gproc рдХреЗ рд▓рд┐рдП рдиреАрдЪреЗ рдЙрддрд░реЛред

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

рдХрд┐рд╕реА рд╕рдВрджреЗрд╢ рдХреЛ рдХрд┐рд╕рдХреЗ рдкрд╛рд╕ рднреЗрдЬрд╛ рдЬрд╛рдП, рдпрд╣ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд░рдЬрд┐рд╕реНрдЯреНрд░рд╛рд░ рдХрд╛ рд╣реЛрдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдЬреЛ рдХреБрдЫ рдирд┐рд░реНрджреЗрд╢рдХреЛрдВ рдХреЛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЕрдиреНрд╡реЗрд╖рдХ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддрд╛ рд╣реИред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, Erlang / OTP рдкрд░рдорд╛рдгреБ рдирд╛рдо рдХреЗ рддрд╣рдд рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкрдВрдЬреАрдХрд░рдг рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдмреЗрдХрд╛рд░ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдХрдЪрд░рд╛ рд╕рдВрдЧреНрд░рд╣рдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдкрд░рдорд╛рдгреБрдУрдВ рдХреЛ рдПрдХрддреНрд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░, рдПрдХ рдмрд╛рд░ рдмрдирд╛рдП рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж, рд╡реЗ рдкреВрд░реЗ рдиреЛрдб рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рдкреВрд░рд╛ рд╣реЛрдиреЗ рддрдХ рд░рд╣рддреЗ рд╣реИрдВ, рдЬреЛ рдЖрд╡рд╢реНрдпрдХ рд░реВрдк рд╕реЗ рд╕рднреА рдореЗрдореЛрд░реА рдХреА рдердХрд╛рд╡рдЯ рдХреЛ рдЬрдиреНрдо рджреЗрдЧрд╛, рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ рдЕрджреНрд╡рд┐рддреАрдп рдирд╛рдореЛрдВ рдХреЗ рддрд╣рдд рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░реЗрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдРрд╕рд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЕрд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдХрд┐рд╕реА рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╢рдмреНрджреЛрдВ рдХреЛ рдПрдХ рдкрд░рдорд╛рдгреБ рдореЗрдВ рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛, рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдирд┐рдпрдореЛрдВ рдХреА рд░рдЪрдирд╛ рдХрд░рдиреА рд╣реЛрдЧреА, рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдХреЗрд╡рд▓ рдПрдХ рдирд╛рдо рдХреЗ рддрд╣рдд рдкрдВрдЬреАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред erlang:register/2



рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд░рдорд╛рдгреБ рдирд╛рдо рдХреЗ рддрд╣рдд рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ erlang:register/2



рдлрд╝рдВрдХреНрд╢рди рдХреЗрд╡рд▓ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рд░рд╣рдиреЗ рд╡рд╛рд▓реА рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреА рдПрдХ рдЫреЛрдЯреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд▓рд┐рдП рдорд╛рдиреНрдп рд╣реИ рдЬрд┐рдирдХреЗ рдирд╛рдо рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдПрдирд╛рд▓реЙрдЧ рдЕрдирд┐рд╡рд╛рд░реНрдп рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рд╡реИрд╢реНрд╡рд┐рдХ рдЪрд░ рд╣реИред

рдЗрди рдкреНрд░рддрд┐рдмрдВрдзреЛрдВ рдХреЛ рджрд░рдХрд┐рдирд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдпреЛрдЬрдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдХреНрд╕рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

  1. рд░рдЬрд┐рд╕реНрдЯреНрд░рд╛рд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╢реБрд░реВ рдХреА рдЧрдИ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдИрдЯреАрдПрд╕ рдЯреЗрдмрд▓ рдмрдирд╛рдИ рдЬрд╛ рд░рд╣реА рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рдорд╛рд▓рд┐рдХ рд╣реИрдВ;
  2. рдЬрдм рдкрдВрдЬреАрдХреГрдд рд╣реЛрдиреЗ рд╡рд╛рд▓реА рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рд╢реБрд░реВ рдХрд░рдирд╛ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рд╡реЗ рд░рдЬрд┐рд╕реНрдЯреНрд░рд╛рд░ рдХреЛ рдПрдХ рд╕рдВрджреЗрд╢ рднреЗрдЬрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рдкрдВрдЬреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ (рдХреЛрдИ рдЗрд░рд▓рд╛рдВрдЧ рдЕрд╡рдзрд┐) рдФрд░ рдЙрдирдХреЗ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рд╣реЛрддреЗ рд╣реИрдВ;
  3. рд░рдЬрд┐рд╕реНрдЯреНрд░рд╛рд░ рдЗрд╕ рдореИрдкрд┐рдВрдЧ рдХреЛ рдИрдЯреАрдПрд╕ рдЯреЗрдмрд▓ рдкрд░ рд▓рд┐рдЦрддрд╛ рд╣реИ рдФрд░ erlang:monitor/2



    рд╕рд╛рде рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдмрдирд╛рддрд╛ рд╣реИ erlang:monitor/2



    ;
  4. рдкрдВрдЬреАрдХреГрдд рдкреНрд░рдХреНрд░рд┐рдпрд╛, рдкреВрд░рд╛ рд╣реЛрдиреЗ рдкрд░, рдпрд╛ рддреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЕрдкрдиреЗ рдбреЗрд░реЗрдЧрдЧреНрд░реЗрд╢рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рд╕рдВрджреЗрд╢ рднреЗрдЬрддрд╛ рд╣реИ, рдпрд╛ рд░рдЬрд┐рд╕реНрдЯреНрд░рд╛рд░ рдХреЛ рдПрдХ 'DOWN'



    рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ, рдЬрдм рдпрд╣ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреНрд░реИрд╢ рд╣реЛ рдЬрд╛рддреА рд╣реИ, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рд╡рд╣ рдЕрдкрдирд╛ рд░рд┐рдХреЙрд░реНрдб ets рдЯреЗрдмрд▓ рд╕реЗ рд╣рдЯрд╛ рджреЗрддрд╛ рд╣реИ;


рдпрд╣ рдпреЛрдЬрдирд╛ рдмрд╣реБрдд рдмрд╛рд░ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рддреА рд╣реИ, рд▓рдЧрднрдЧ рд╣рд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдЕрдкрдирд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реЛрддрд╛ рд╣реИ, рдЕрдкрдиреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдФрд░ рдмрдЧ рдХреЗ рд╕рд╛рдеред рдмреЗрд╢рдХ, рдХрд┐ рдЗрд╕ рд░рдЬрд┐рд╕реНрдЯреНрд░рд╛рд░ рдХреЛ рдХрд┐рд╕реА рдЕрдиреЛрдЦреА рдЪреАрдЬрд╝ рд╕реЗ рдмрджрд▓рдиреЗ рдХреА рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рдЗрдЪреНрдЫрд╛ рд╣реИред рдФрд░ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╣рд▓ рдбреЗрд╡рд▓рдкрд░ рдЙрд▓реНрдл рд╡рд┐рдЧрд░ рдФрд░ рдЙрдирдХреЗ gproc рдПрдкреНрд▓рд┐рдХреЗрд╢рди (https://github.com/esl/gproc) рдХреЗ рд░реВрдк рдореЗрдВ рдЖрдпрд╛ред

рдЖрд╡реЗрджрди рдПрдкреАрдЖрдИ github.com/esl/gproc/blob/master/doc/gproc.md рдкрд░ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рд╕реНрдерд╛рдиреАрдп рдкрдВрдЬреАрдХрд░рдг



рдПрдХ рд╕рд░рд▓ рдЕрд╡рдзрд┐ рдореЗрдВ рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд╕реНрдерд╛рдиреАрдп (рд╡рд░реНрддрдорд╛рди рдиреЛрдб рдкрд░) рдкрдВрдЬреАрдХрд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рд╕реНрд░реЛрдд рдХреЛрдб рдпрд╣рд╛рдВ рд▓рд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: github.com/Zert/gproc-tutorial.git

рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдЬрд┐рд╕реЗ рд╣рдо gproc рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрдВрдЬреАрдХреГрдд рдХрд░реЗрдВрдЧреЗ gpt_proc.erl



рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╣реИред gpt_sup.erl



рдореЗрдВ рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕рдореВрд╣ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХ рдХреЛрдб рд╣реЛрддрд╛ рд╣реИред рдЬрдм gpt_sup:start_worker/1



рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╣рдорд╛рд░реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЙрд╕ рдирд╛рдо рдХреЗ рддрд╣рдд рд╢реБрд░реВ рдФрд░ рдкрдВрдЬреАрдХреГрдд рд╣реЛрдЧреА рдЬреЛ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЗрд╡рд▓ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рдПрдХ рд╕рдВрдЦреНрдпрд╛ рд╣реИред

рд╣рдордиреЗ рдЙрдкрд░реЛрдХреНрдд рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдиреЛрдб рд╢реБрд░реВ рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рд▓реЙрдиреНрдЪ рдХреА рдЧрдИ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд┐рдпрд╛ рд╣реИ:

 (gptnode @ localhost) 1> [gpt_sup: start_worker (Id) ||  Id <- рд╕реВрдЪрд┐рдпрд╛рдБ: seq (1,3)]ред
 (gpt_proc: 29) рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкреНрд░рд╛рд░рдВрдн рдХрд░реЗрдВ: 1
 (gpt_proc: 29) рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкреНрд░рд╛рд░рдВрдн рдХрд░реЗрдВ: 2
 (gpt_proc: 29) рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкреНрд░рд╛рд░рдВрдн рдХрд░реЗрдВ: 3
 [{рдареАрдХ рд╣реИ, <0.61.0>}, {рдареАрдХ рд╣реИ, <0.62.0>}, {рдареАрдХ рд╣реИ, <0.63.0>}]




gproc:add_local_name(Name)



рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рдХреЙрд▓ gproc:add_local_name(Name)



рддрд╣рдд рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рддрд╛ рд╣реИ Name



(рдпрд╣ рдлрд╝рдВрдХреНрд╢рди gproc:reg({n,l,Name})



рдкрд░ рд╕рд┐рд░реНрдл рдПрдХ рдЖрд╡рд░рдг рд╣реИ gproc:reg({n,l,Name})



, рдЬрд╣рд╛рдВ n



name



, l



local



)ред рдЙрд╕рдХреЗ рдмрд╛рдж, gproc:lookup_local_name(Name)



рдлрд╝рдВрдХреНрд╢рди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░ рджреЗрдЧрд╛ред

рдЕрдм рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдмрддрд╛рдПрдВ рдХрд┐ рдирд╛рдо рдХреЗ рд╕рд╛рде рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рдФрд░ рдкрдВрдЬреАрдХрд░рдг рдХрд░рдиреЗ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░реЗрдВред рдЗрд╕рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рдХреЛрдб рд╣реИ:

 handle_info ({рдкреНрд░рддреАрдХреНрд╖рд╛, рдЖрдИрдбреА},
             #рд╕реНрдЯреЗрдЯ {рдЖрдИрдбреА = MyId} = рд░рд╛рдЬреНрдп) ->
     gproc: рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдВ ({n, l, Id}),
     ? DBG ("MyId: ~ pред ~ NNewId: ~ pред", [MyId, Id],)
     {noreply, State};




рдпрд╣рд╛рдБ gproc:await/1



рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдирд┐рдореНрди рд░реВрдк рдХреЗ рддрд░реНрдХ рдХреЗ рд╕рд╛рде рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ: {n, l, Id}



ред рдХрд┐рд╕реА рдХрд╛рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣ рдПрдХ рдЖрд╡рд░рдг рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдУрд╣ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗред

 (gptnode @ localhost) 2> gproc: looking_local_name (1)!  {рдкреНрд░рддреАрдХреНрд╖рд╛, рек}ред
 {рдкреНрд░рддреАрдХреНрд╖рд╛, рек}




рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ 4 рдХреЗ рд╕рд╛рде рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╢реБрд░реВ рдХрд░рдирд╛, рд╣рдо рдкрд╣рд▓реЗ рдЗрд╕реЗ рдПрдХ рд╕рдВрджреЗрд╢ рджреЗрдЦреЗрдВрдЧреЗ, рдФрд░ рдлрд┐рд░ рдкрд╣рд▓реА рдкреНрд░рддреАрдХреНрд╖рд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реЗ:

 (gptnode @ localhost) 3> gpt_sup: start_worker (4)ред
 (gpt_proc: 29) рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкреНрд░рд╛рд░рдВрдн рдХрд░реЗрдВ: 4
 (gpt_proc: 45) MyId: 1ред
 рдиреНрдпреВрдЖрдИрдб: 4
 {рдареАрдХ рд╣реИ, <0.66.0>}




рдЪрд▓реЛ stop



рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ stop



:

 handle_info (рд╕реНрдЯреЙрдк, рд╕реНрдЯреЗрдЯ) ->
     {рд░реЛрдХ, рд╕рд╛рдорд╛рдиреНрдп, рд░рд╛рдЬреНрдп};




рдФрд░ рдЗрд╕реЗ рд░реЛрдХреЗрдВ:

 (gptnode @ localhost) 4> gproc: looking_local_name (1)!  рдмрдВрдж рдХрд░реЛред
 рдмрдВрдж




рдЙрд╕рдХреЗ рдмрд╛рдж, рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд░рдЬрд┐рд╕реНрдЯреНрд░рд╛рд░ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рд╣рдЯрд╛ рджреА рдЬрд╛рддреА рд╣реИ:

 (gptnode @ localhost) 5> gproc: looking_local_name (1)ред
 рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд




рд╡реИрд╢реНрд╡рд┐рдХ рдкрдВрдЬреАрдХрд░рдг



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

рдХреНрд▓рд╕реНрдЯрд░ рдореЗрдВ рдХрд┐рд╕реА рднреА рдиреЛрдб рдХреЗ рд▓рд┐рдП рдЕрдкрдиреА рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рддрд╛рдХрд┐ рд╡реЗ рдЕрдиреНрдп рдиреЛрдбреНрд╕ рд╕реЗ рд╕реБрд▓рдн рд╣реЛрдВ, рдПрдХ рд╡реИрд╢реНрд╡рд┐рдХ рдкрдВрдЬреАрдХрд░рдг рд╣реЛрддрд╛ рд╣реИред GProc рдПрдХ рдХреЙрд▓ рдХреЛ gproc рдкрд░ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ gproc:add_global_name/1



, рдЬреЛ рдЗрд╕ рдХреНрд░рд┐рдпрд╛ рдХреЛ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдПрдХ рдХреНрд▓рд╕реНрдЯрд░ рдореЗрдВ рд╕рдВрдпреБрдХреНрдд рджреЛ рдиреЛрдбреНрд╕ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░реЗрдВрдЧреЗ, рдФрд░ rebar



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



рдкрд╣рд▓реЗ рджреЛ рдЖрдЗрдЯрдо files/vm.args



рдореЗрдВ рд╕реЗрдЯ рдХрд┐рдП рдЧрдП рд╣реИрдВ:

 ## рдиреЛрдб рдХрд╛ рдирд╛рдо
 -sname {{рдиреЛрдб}}

 ## рд╡рд┐рддрд░рд┐рдд рдЗрд▓рдВрдЧ рдХреЗ рд▓рд┐рдП рдХреБрдХреА
 -рд╕реЗрдЯрдХреА рд╕реВрдХреНрддрд┐




рдпрд╣рд╛рдВ {{node}}



рдкреНрд▓реЗрд╕рд╣реЛрд▓реНрдбрд░ рд╣реИ рдЬреЛ рд░рд┐рд▓реАрдЬ рд╣реЛрдиреЗ рдкрд░ рдкреЙрдкреНрдпреБрд▓реЗрдЯ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред -setcookie



рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди -setcookie



рдЗрд╕ рдиреЛрдб рдХреЗ рд▓рд┐рдП рдХреБрдХреА рдорд╛рди рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ; рдХреНрд▓рд╕реНрдЯрд░ рдореЗрдВ рд╕рднреА рдиреЛрдбреНрд╕ рдореЗрдВ рд╕рдорд╛рди рдорд╛рди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рджреВрд╕рд░реЗ рджреЛ рдмрд┐рдВрджреБ files/app.config



рдореЗрдВ рд╕реЗрдЯ рдХрд┐рдП рдЧрдП рд╣реИрдВред рдкреНрд▓реЗрд╕рд╣реЛрд▓реНрдбрд░реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдпрд╣рд╛рдВ рднреА рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛:

  %% рдЬреАрдкреЛрдХ
  {gproc, {{gproc_params}}},

 %% рдХрд░реНрдиреЗрд▓
  {рдХрд░реНрдиреЗрд▓, {{рдХрд░реНрдиреЗрд▓_рдкрд░рдореНрд╕}}},




рдкреНрд▓реЗрд╕рд╣реЛрд▓реНрдбрд░реНрд╕ рдХреЛ рднрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо reltool.config



рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЗрдВрдЧрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдкрд┐рдЫрд▓реА рджреЛ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП:

   {рдЯреЗрдореНрдкрд▓реЗрдЯ, "рдлрд╛рдЗрд▓реЗрдВ / app.config", "etc / app.config"},
   {рдЯреЗрдореНрдкрд▓реЗрдЯ, "рдлрд╛рдЗрд▓реЗрдВ / vm.args", "etc / vm.args"}




рд╣рдо рджреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рддреЗ рд╣реИрдВ, рдкреНрд░рддреНрдпреЗрдХ рдиреЛрдб рдХреЗ рд▓рд┐рдП: vars/dev1_vars.config



рдФрд░ vars/dev2_vars.config



ред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреНрд▓реЗрд╕рд╣реЛрд▓реНрдбрд░ рдорд╛рди dev1_vars.config рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╣реЛрдВрдЧреЗ:

 %% рдЖрджрд┐ / app.config
 {Gproc_params,
 "[
   {gproc_dist, {['gpt1 @ localhost'],
                 [{рдХрд╛рд░реНрдпрдХрд░реНрддрд╛, ['gpt2 @ localhost']}]}}
  ] тАЭ}ред

 {Kernel_params,
 "[
   {Sync_nodes_mandatory, ['gpt2 @ localhost']},
   {Sync_nodes_time, 15000}
  ] тАЭ}ред

 %% рдЖрджрд┐ / vm.args
 {рдиреЛрдб, "gpt1 @ localhost"}ред




dev2_vars.config



рдлрд╝рд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП dev2_vars.config



sync_nodes_mandatory



рдФрд░ node



рдкреИрд░рд╛рдореАрдЯрд░ рд╕реНрд╡реИрдк рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗред рдЖрдЗрдП рдЙрдирдХрд╛ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВред

gproc_dist



рдкреИрд░рд╛рдореАрдЯрд░ gproc рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИ; рдпрд╣ рджреЛ рд╕реВрдЪрд┐рдпреЛрдВ рдХрд╛ рдПрдХ рд╕рдореВрд╣ рд╣реИред рдкрд╣рд▓реА рд╕реВрдЪреА рдореЗрдВ рдиреЛрдбреНрд╕ рд╣реЛрддреЗ рд╣реИрдВ рдЬреЛ рдПрдХ рд▓реАрдбрд░ (рдорд╛рд╕реНрдЯрд░) рдмрдирдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрддреЗ рд╣реИрдВ, рджреВрд╕рд░реА рд╕реВрдЪреА рдореЗрдВ рдХреБрдВрдЬреА-рдореВрд▓реНрдп рдЯреНрдпреВрдкрд▓реНрд╕ рд╣реЛрддреЗ рд╣реИрдВ, рдЕрдм рддрдХ рд╣рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдХреБрдВрдЬреА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ - workers



, рдЬреЛ рдиреЛрдбреНрд╕ рдХреА рдПрдХ рд╕реВрдЪреА рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдХреНрд▓рд╕реНрдЯрд░ (рджрд╛рд╕) рдХреЗ рд╕рд░рд▓ рд╕рджрд╕реНрдп рд╣реИрдВред

рдХрд░реНрдиреЗрд▓ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЗ рджреЛ рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИрдВред рдкрд╣рд▓рд╛, sync_nodes_mandatory



рдиреЛрдбреНрд╕ рдХреА рдПрдХ рд╕реВрдЪреА рд╣реИ рдЬреЛ рдХреНрд▓рд╕реНрдЯрд░ рдореЗрдВ рдореМрдЬреВрдж рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рджреВрд╕рд░рд╛, sync_nodes_timeout



/ sync_nodes_timeout



рдорд┐рд▓реАрд╕реЗрдХрдВрдб рдореЗрдВ рд╕рдордп рд╣реИ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдиреЛрдб рдкрд┐рдЫрд▓реА рд╕реВрдЪреА рд╕реЗ рдиреЛрдбреНрд╕ рдХреЗ рдЖрдиреЗ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдЧрд╛ред рдпрджрд┐ рдЗрд╕ рд╕рдордп рдХреЗ рджреМрд░рд╛рди рдиреЛрдбреНрд╕ рдкреНрд░рдХрдЯ рдирд╣реАрдВ рд╣реБрдП, рддреЛ рдиреЛрдб рдмрдВрдж рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рдЪрд▓реЛ рдЗрд╕реЗ рджреЛрдиреЛрдВ рд╣рд╛рдереЛрдВ рд╕реЗ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордп рдХреЗ рд▓рд┐рдП 15 рд╕реЗрдХрдВрдб рдХрд╛ рдореВрд▓реНрдп рджреЗрдВред

node



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

рдЕрдм Makefile рд╕реЗ рдирд┐рдореНрди рдирд┐рдпрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рджреЛ рд░рд┐рд▓реАрдЬрд╝ рдмрдирд╛рдПрдБ:

 рджреЗрд╡ рез рджреЗрд╡ реи:
     mkdir -p рджреЗрд╡
     (cd rel && rebar рдЙрддреНрдкрдиреНрди target_dir = .. / dev / $ @ overlay_vars=vars/$@_vars.config)




dev/dev1



, рджреВрд╕рд░реА рдЯрд░реНрдорд┐рдирд▓ рд╡рд┐рдВрдбреЛ рд▓реЙрдиреНрдЪ рдХрд░реЗрдВ (рдпрд╛ рд╕реНрдХреНрд░реАрди рдореЗрдВ рдПрдХ рдирдИ рд╡рд┐рдВрдбреЛ рдмрдирд╛рдПрдВ ),



dev / dev2 рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдкрд░ рдЬрд╛рдПрдВ .



.



ред/bin/gptnode рдХрдВрд╕реЛрд▓ 'ред рдЖрдЗрдП рдкрд╣рд▓реЗ рдПрд░рд▓реИрдВрдЧ рд╢реЗрд▓ рдореЗрдВ рдЙрдкрд▓рдмреНрдз рдиреЛрдбреНрд╕ рдХреА рд╕реВрдЪреА рджреЗрдЦреЗрдВ:

 (gpt1 @ localhost) 1> рдиреЛрдбреНрд╕ ()ред
 [gpt2 @ localhost]


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

 (gpt1 @ localhost) 2> gproc: add_global_name ({рд╢реЗрд▓, 1})ред
 рд╕рдЪ




рдХрд┐рд╕реА рдЕрдиреНрдп рд╡рд┐рдВрдбреЛ рдореЗрдВ, рдЗрд╕ рд╢рдмреНрдж рдХреЗ рд▓рд┐рдП рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рд╕реЗ рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ:

 (gpt2 @ localhost) 2> gproc: рд▓реБрдХрдЕрдк_рдЧреНрд▓реЛрдмрд▓_рдирд╛рдо ({рд╢реЗрд▓, 1})ред
 <3358.70.0>




рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХред рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдПрдХ рд╕рдВрджреЗрд╢ рднреЗрдЬрдХрд░, рд╣рдо рдЗрд╕реЗ рдкрд╣рд▓реЗ рдиреЛрдб рдкрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

 (gpt2 @ localhost) 3> gproc: рд▓реБрдХрдЕрдк_рдЧреНрд▓реЛрдмрд▓_рдирд╛рдо ({рд╢реЗрд▓, 1})!  {рд╕рдВрджреЗрд╢,}ред
 рд╕рдВрджреЗрд╢




рд╣рдо рдЗрд╕реЗ flush()



рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рдкрд╣рд▓реЗ рдиреЛрдб рдкрд░ рдкрдврд╝рддреЗ рд╣реИрдВ:

 (gpt1 @ localhost) 3> рдлреНрд▓рд╢ ()ред
 рд╢реЗрд▓ рдХреЛ {рд╕рдВрджреЗрд╢, рд╕рдВрджреЗрд╢} рдорд┐рд▓рд╛
 рдареАрдХ




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



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



All Articles