Erlang / Elixir рд╕реЗ Java рдФрд░ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрддред 20 рдорд┐рдирдЯ рдХреЗ рд▓рд┐рдП рд╕рд╛рд╣рд╕рд┐рдХ

рд╣рд╛рдп рд╕рдм!


рдЬрдм рдЖрдкрдХреЛ 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; //   . //   - .  encon-config NodeConfig config = NodeConfig.builder() // true -   , // false ( ) -   .shortName(true) .cookie("secret") .build(); // ,   EPMD     Erlang  Node node = Nodes.singleNode("echo-node", config); 

рдиреЛрдЯ: рдЙрдкрд░реЛрдХреНрдд рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдпрд╛ рддреЛ EPMD рдбреЗрдореЙрди рдпрд╛ рдЗрд╕рдХреЗ рдЬрд╛рд╡рд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдЪрд▓рд╛рдирд╛ рд╣реЛрдЧрд╛ред

рдореЗрд▓рдмреЙрдХреНрд╕ рдмрдирд╛рдирд╛


рдореЗрд▓рдмреЙрдХреНрд╕, рдЙрд░реНрдл тАЛтАЛрдкреНрд░рдХреНрд░рд┐рдпрд╛, рдПрд░рд▓рдВрдЧ рдЯрд░реНрдорд┐рдирд▓ рдореЗрдВ:


 import io.appulse.encon.mailbox.Mailbox; Mailbox mailbox = node.mailbox() .name("popa") //  .build(); 

рдиреЛрдбреНрд╕ рдХреЗ рд▓рд┐рдП рдХрдиреЗрдХреНрд╢рди


рдиреЛрдЯ: рдЖрдк {, } рдиреЛрдб {, } рдпрд╛ 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 рдкреЗрдЬ рдкрд░ рдЕрдзреНрдпрдпрди рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред

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


All Articles