рд╣рд╛рдп рд╕рдм!
рдЬрдм рдЖрдкрдХреЛ 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 рдкреЗрдЬ рдкрд░ рдЕрдзреНрдпрдпрди рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред