рд╣рд╛рдп рд╕рдм!
рдЬрдм рдЖрдкрдХреЛ Erlang / Elixir рджреБрдирд┐рдпрд╛ рд╕реЗ рдЬрд╛рд╡рд╛ рдФрд░ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд рд╕реЗ рд╕рдВрд╡рд╛рдж рдХрд░рдирд╛ рд╣реЛрдЧрд╛ - рддреЛ рдмрд╣реБрдд рд╕рд╛рд░реЗ рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рд╣реИрдВред рд╣рд░ рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП рдПрдХ рдкрд░рд┐рддреНрдпрдХреНрдд рдЬреЗрдВрдердлреЗрд╕ рдФрд░ рдПрдХ рдирдИ рдПрдирдХреЙрди рд▓рд╛рдЗрдмреНрд░реЗрд░реА, рдЬрд┐рд╕рдХрд╛ рдПрдХ рдореВрд▓ рдЙрджрд╛рд╣рд░рдг рдмрд┐рд▓реНрд▓реА рдХреЗ рдиреАрдЪреЗ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдирд┐рд░реНрднрд░рддрд╛ рдЬреЛрдбрд╝реЗрдВ
JVM
рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ Encon
рдирд┐рд░реНрднрд░рддрд╛ рдЬреЛрдбрд╝реЗрдВ:
рдорд╛рд╡реЗрди :
<dependencies> ... <dependency> <groupId>io.appulse.encon</groupId> <artifactId>encon</artifactId> <version>1.6.4</version> </dependency> ... </dependencies>
рдЧреНрд░реЗрдбреЗрд▓ :
dependencies { compile 'io.appulse.encon:encon:1.6.4' }
рдиреЛрдЯ: рдпрджрд┐ рдРрд╕реА рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, Ant
рдкрд░ рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛), рддреЛ рдЬрд╛рд░ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рд░реНрднрд░рддрд╛ GitHub рдкрд░ рд░рд┐рд▓реАрдЬрд╝ рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рдкрд╛рдИ рдЬрд╛ рд╕рдХрддреА рд╣реИред
Erlang рдиреЛрдбреНрд╕ рд▓реЙрдиреНрдЪ рдХрд░реЗрдВ
import io.appulse.encon.Node; import io.appulse.encon.Nodes; import io.appulse.encon.config.NodeConfig;
рдиреЛрдЯ: рдЙрдкрд░реЛрдХреНрдд рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдпрд╛ рддреЛ EPMD
рдбреЗрдореЙрди рдпрд╛ рдЗрд╕рдХреЗ рдЬрд╛рд╡рд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдЪрд▓рд╛рдирд╛ рд╣реЛрдЧрд╛ред
рдореЗрд▓рдмреЙрдХреНрд╕ рдмрдирд╛рдирд╛
рдореЗрд▓рдмреЙрдХреНрд╕, рдЙрд░реНрдл тАЛтАЛрдкреНрд░рдХреНрд░рд┐рдпрд╛, рдПрд░рд▓рдВрдЧ рдЯрд░реНрдорд┐рдирд▓ рдореЗрдВ:
import io.appulse.encon.mailbox.Mailbox; Mailbox mailbox = node.mailbox() .name("popa")
рдиреЛрдбреНрд╕ рдХреЗ рд▓рд┐рдП рдХрдиреЗрдХреНрд╢рди
рдиреЛрдЯ: рдЖрдк {, }
рдиреЛрдб {, }
рдпрд╛ PID (рдпрджрд┐ рдХреЛрдИ рд╣реЛ) рдХреЗ рдкреНрд░рд╛рд░реВрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рд╕рдВрджреЗрд╢ рднреЗрдЬрдХрд░ рдПрд░реНрд▓рд╛рдВрдЧ / рдЕрдореГрдд рдпрд╛ рдЬрд╛рд╡рд╛ рд╕реЗ рдПрдХ рдХрдиреЗрдХреНрд╢рди рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЖрдк net_adm:ping/1
рдорд╛рдзреНрдпрдо рд╕реЗ Erlang рд╕реЗ рдкрд┐рдВрдЧ рд╕рдВрджреЗрд╢ рднреЗрдЬрдХрд░ рдиреЛрдбреНрд╕ рдХреЗ рдмреАрдЪ рд╕рдВрдЪрд╛рд░ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ net_adm:ping/1
:
(erlang@localhost)1> net_adm:ping('java@localhost'). pong (erlang@localhost)2>
{Name, Node}
рдХреЛ рдПрдХ рд╕рдВрджреЗрд╢ рднреЗрдЬрдирд╛ рднреА рд╕рдВрднрд╡ рд╣реИ, рдЬрд╣рд╛рдВ Node
'java@localhost'
рдлреЙрд░реНрдо рдХрд╛ рдПрдХ рдкрд░рдорд╛рдгреБ рд╣реИ, рдФрд░ Name
PID рдпрд╛ рдкрдВрдЬреАрдХреГрдд рдореЗрд▓рдмреЙрдХреНрд╕ рдирд╛рдо рд╣реИ рдЬреЛ рдЬрд╛рд╡рд╛ рдкрдХреНрд╖ рдкрд░ рдореМрдЬреВрдж рд╣реИред
(erlang@localhost)1> {my_process, 'java@localhost'} ! hello. hello (erlang@localhost)2>
рдпрджрд┐ рдореЗрд▓рдмреЙрдХреНрд╕ рдЬрд╛рд╡рд╛ рдкрдХреНрд╖ рдкрд░ рдореМрдЬреВрдж рд╣реИ, рддреЛ рдпрд╣ рдПрдХ рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдЧрд╛ред
рдЬрд╛рд╡рд╛ рд╕реЗ рд╕рдВрджреЗрд╢ рднреЗрдЬрдирд╛
Mailbox
send
рддрд░реАрдХреЛрдВ Mailbox
рдкреВрд░рд╛ рдкрд░рд┐рд╡рд╛рд░ рд╣реЛрддрд╛ рд╣реИ:
- send ( ErlangPid , ErlangTerm ) - рдХрд┐рд╕реА рджреВрд░рд╕реНрде рдпрд╛ рд╕реНрдерд╛рдиреАрдп PID рдХреЛ рд╕рдВрджреЗрд╢ рднреЗрдЬрддрд╛ рд╣реИ;
- send ( String , ErlangTerm ) - рд╢рдмреНрдж рдХреЛ рдЙрд╕реА рдореЗрд▓рдмреЙрдХреНрд╕ рдХреЗ рдирд╛рдо рд╕реЗ рд╕реНрдерд╛рдиреАрдп рдореЗрд▓рдмреЙрдХреНрд╕ рдореЗрдВ рднреЗрдЬрддрд╛ рд╣реИ;
- send ( String , String , ErlangTerm ) - рдЗрд╕рдХреЗ рдирд╛рдо рд╕реЗ рдПрдХ рд░рд┐рдореЛрдЯ / рд▓реЛрдХрд▓ рдиреЛрдб рдФрд░ рдПрдХ рдореЗрд▓рдмреЙрдХреНрд╕ рдХреЛ рд╕рдВрджреЗрд╢ рднреЗрдЬрддрд╛ рд╣реИред
рдЖрдЗрдП рдЗрд╕реЗ рдЖрдЬрд╝рдорд╛рдПрдВ, рдПрд░рд▓рд╛рдВрдЧ-рдЦреЛрд▓ рдЦреЛрд▓реЗрдВ рдФрд░ рдЗрд╕реЗ рдирд╛рдо рдХреЗ рд╕рд╛рде рдкрдВрдЬреАрдХреГрдд рдХрд░реЗрдВ ... 'shell'
:
(erlang@localhost)1> erlang:register(shell, self()). true (erlang@localhost)2>
рдЕрдм, рд╣рдо рдЬрд╛рд╡рд╛ рд╕реЗ рдПрдХ рд╕рдВрджреЗрд╢ рднреЗрдЬ рд╕рдХрддреЗ рд╣реИрдВ (рдиреЛрдб рдХреЗ рд╕рд╛рде рд╕рдВрдЪрд╛рд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛):
import static io.appulse.encon.terms.Erlang.atom; mailbox.send("erlang@localhost", "shell", atom("hello"));
рд╣рдо рдПрд░реНрд▓реИрдВрдЧ рд▓реМрдЯрддреЗ рд╣реИрдВ рдФрд░ рдкреНрд░рд╛рдкреНрдд рд╕рдВрджреЗрд╢ рдХреЛ рдкрдврд╝рддреЗ рд╣реИрдВ:
(erlang@localhost) 1> flush(). Shell got hello ok (erlang@localhost) 2>
рдЬрд╛рд╡рд╛ рдореЗрдВ рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛
рдПрдХ рдЖрдиреЗ рд╡рд╛рд▓реЗ рд╕рдВрджреЗрд╢ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдПрдХ Mailbox
рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛: receive()
рдпрд╛ receive(timeout, timeUnit)
, рдЬреЛ рдХрд┐рд╕реА рдирдП рд╕рдВрджреЗрд╢ рдпрд╛ рдирд┐рд╢реНрдЪрд┐рдд рд╕рдордп рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИред
import io.appulse.encon.Node; import io.appulse.encon.Nodes; import io.appulse.encon.config.NodeConfig; import io.appulse.encon.connection.regular.Message; import io.appulse.encon.mailbox.Mailbox; public class Main { public static void main (String[] args) { NodeConfig config = NodeConfig.builder() .shortName(true) .build(); Node node = Nodes.singleNode("java@localhost", config); Mailbox mailbox = node.mailbox() .name("my_process") .build(); Message message = mailbox.receive(); System.out.println("Incoming message: " + message.getBody().asText()); } }
Erlang рдиреЛрдб рдкреНрд░рд╛рд░рдВрдн рдХрд░реЗрдВ рдФрд░ рдПрдХ рд╕рдВрджреЗрд╢ рднреЗрдЬреЗрдВ:
$> erl -sname erlang@localhost ... (erlang@localhost)1> {my_process, 'java@localhost'} ! hello.
рдирд┐рд╖реНрдХрд░реНрд╖
рдпреЗ рдФрд░ рдХрдИ рдЕрдиреНрдп рдЙрджрд╛рд╣рд░рдг рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╡реЗрдмрд╕рд╛рдЗрдЯ рдФрд░ / рдпрд╛ GitHub рдкреЗрдЬ рдкрд░ рдЕрдзреНрдпрдпрди рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред