рд░реЗрдмрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛
рдЗрд╕ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдореЗрдВ рдкреБрд░рд╛рдиреА рдЬрд╛рдирдХрд╛рд░реА рд╣реЛ рд╕рдХрддреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдкрд┐рдЫрд▓реЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдВрдЧрддрддрд╛ рдмрдирд╛рдП рдмрд┐рдирд╛ рд░реЗрдмрд╛рд░ рдмрд╣реБрдд рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ рд╡рд┐рдХрд╕рд┐рдд рд╣реЛ рд░рд╣рд╛ рд╣реИред
рдПрд░реНрд▓реИрдВрдЧ рдкрд░ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рддреЗ рд╕рдордп, рдЖрдкрдХреЛ рдЕрдХреНрд╕рд░ рд╡рд┐рднрд┐рдиреНрди рд╕реНрд░реЛрддреЛрдВ рд╕реЗ рдирд┐рд░реНрднрд░рддрд╛рдПрдВ рдПрдХрддреНрд░ рдХрд░рдиреА рдкрдбрд╝рддреА рд╣реИрдВ, рдЙрдирдХреЗ рдЖрд╡рд╢реНрдпрдХ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдкрд░ рдирдЬрд╝рд░ рд░рдЦрдирд╛, рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд╡рд┐рддрд░рдг рдХреЗ рд▓рд┐рдП рдУрдЯреАрдкреА рд░рд┐рд▓реАрдЬрд╝ рдХрд░рдирд╛ред рдЪреАрдЬреЗрдВ рдмрд╣реБрдд рдирд┐рдпрдорд┐рдд рдФрд░ рдЕрдкреНрд░рд┐рдп рд╣реИрдВред рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП рдХрдо рдЕрдкреНрд░рд┐рдп рдХреНрд╖рдг рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП, рдмрд╛рд╢реЛ рдиреЗ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдЙрдкрдХрд░рдг рдмрдирд╛рдпрд╛ - рд░реЗрдмрд╛рд░ред рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВ рдЗрд╕реЗ рддреГрддреАрдп-рдкрдХреНрд╖ рдирд┐рд░реНрднрд░рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЬреАрд╡рди рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдУрдЯреАрдкреА рд░рд┐рд▓реАрдЬрд╝ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд╛рднреЛрдВ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реВрдВрдЧрд╛ред
рдЖрдк рд░реЗрдЧрд░ рдХреЛ 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
рдлрд╝рдВрдХреНрд╢рди рдХреЗрд╡рд▓ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рд░рд╣рдиреЗ рд╡рд╛рд▓реА рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреА рдПрдХ рдЫреЛрдЯреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд▓рд┐рдП рдорд╛рдиреНрдп рд╣реИ рдЬрд┐рдирдХреЗ рдирд╛рдо рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдПрдирд╛рд▓реЙрдЧ рдЕрдирд┐рд╡рд╛рд░реНрдп рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рд╡реИрд╢реНрд╡рд┐рдХ рдЪрд░ рд╣реИред
рдЗрди рдкреНрд░рддрд┐рдмрдВрдзреЛрдВ рдХреЛ рджрд░рдХрд┐рдирд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдпреЛрдЬрдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдХреНрд╕рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
- рд░рдЬрд┐рд╕реНрдЯреНрд░рд╛рд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╢реБрд░реВ рдХреА рдЧрдИ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдИрдЯреАрдПрд╕ рдЯреЗрдмрд▓ рдмрдирд╛рдИ рдЬрд╛ рд░рд╣реА рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рдорд╛рд▓рд┐рдХ рд╣реИрдВ;
- рдЬрдм рдкрдВрдЬреАрдХреГрдд рд╣реЛрдиреЗ рд╡рд╛рд▓реА рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рд╢реБрд░реВ рдХрд░рдирд╛ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рд╡реЗ рд░рдЬрд┐рд╕реНрдЯреНрд░рд╛рд░ рдХреЛ рдПрдХ рд╕рдВрджреЗрд╢ рднреЗрдЬрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рдкрдВрдЬреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ (рдХреЛрдИ рдЗрд░рд▓рд╛рдВрдЧ рдЕрд╡рдзрд┐) рдФрд░ рдЙрдирдХреЗ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рд╣реЛрддреЗ рд╣реИрдВ;
- рд░рдЬрд┐рд╕реНрдЯреНрд░рд╛рд░ рдЗрд╕ рдореИрдкрд┐рдВрдЧ рдХреЛ рдИрдЯреАрдПрд╕ рдЯреЗрдмрд▓ рдкрд░ рд▓рд┐рдЦрддрд╛ рд╣реИ рдФрд░
erlang:monitor/2
рд╕рд╛рде рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдмрдирд╛рддрд╛ рд╣реИerlang:monitor/2
; - рдкрдВрдЬреАрдХреГрдд рдкреНрд░рдХреНрд░рд┐рдпрд╛, рдкреВрд░рд╛ рд╣реЛрдиреЗ рдкрд░, рдпрд╛ рддреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЕрдкрдиреЗ рдбреЗрд░реЗрдЧрдЧреНрд░реЗрд╢рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рд╕рдВрджреЗрд╢ рднреЗрдЬрддрд╛ рд╣реИ, рдпрд╛ рд░рдЬрд┐рд╕реНрдЯреНрд░рд╛рд░ рдХреЛ рдПрдХ
'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
рд╣рдореЗрдВ рдЗрд╕рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдореЗрдВ рджрд┐рдП рдЧрдП рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдмрдирд╛рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реИред рдПрдХ рдХреНрд▓рд╕реНрдЯрд░ рдмрдирд╛рддреЗ рд╕рдордп, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╡рд┐рд╡рд░рдгреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП:
- рдиреЛрдбреНрд╕ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рдХреБрдХреА рдорд╛рди рд╕реЗрдЯ рдХрд░реЗрдВ
- рдЙрдиреНрд╣реЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдирд╛рдо рджреЗрдВред
- рдкреНрд░рддреНрдпреЗрдХ рдиреЛрдб рдкрд░ рдЖрд╡рд╢реНрдпрдХ
kernel
рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рдкреИрд░рд╛рдореАрдЯрд░ рдкрд╛рд╕ рдХрд░реЗрдВ - GProc рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рд╡рд╛рдВрдЫрд┐рдд рдиреЛрдб рд░реЛрд▓реНрд╕ рдХреЛ рдкрд╛рд╕ рдХрд░реЗрдВред
рдкрд╣рд▓реЗ рджреЛ рдЖрдЗрдЯрдо
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 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛, рдФрд░ рджреЛ рдмрд╛рд░ рдирд╣реАрдВ рдЙрдардиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдПрдХ рд▓реЗрдЦ рдореЗрдВ рд╕рдм рдХреБрдЫ рд░рдЦрд╛ред