Erlang分布式编程 #

一、分布式概述 #

Erlang内置分布式支持,允许多个节点之间透明通信。

1.1 特点 #

  • 透明通信
  • 位置透明
  • 内置支持
  • 安全机制

二、节点 #

2.1 启动节点 #

bash
erl -name node1@localhost
erl -sname node1

2.2 节点名 #

erlang
-module(node_info).
-export([demo/0]).

demo() ->
    io:format("Node: ~p~n", [node()]),
    io:format("Nodes: ~p~n", [nodes()]).

2.3 连接节点 #

erlang
-module(connect_nodes).
-export([demo/1]).

demo(Node) ->
    case net_kernel:connect_node(Node) of
        true -> io:format("Connected to ~p~n", [Node]);
        false -> io:format("Failed to connect~n")
    end.

三、分布式通信 #

3.1 发送消息 #

erlang
-module(dist_message).
-export([send/3]).

send(Node, Process, Msg) ->
    {Process, Node} ! Msg.

3.2 远程spawn #

erlang
-module(dist_spawn).
-export([remote_spawn/2]).

remote_spawn(Node, Fun) ->
    spawn(Node, Fun).

3.3 远程调用 #

erlang
-module(dist_rpc).
-export([call/3]).

call(Node, Module, Function) ->
    rpc:call(Node, Module, Function, []).

四、分布式应用 #

4.1 分布式服务器 #

erlang
-module(dist_server).
-export([start/0, start/1, loop/0]).

start() ->
    spawn(?MODULE, loop, []).

start(Node) ->
    spawn(Node, ?MODULE, loop, []).

loop() ->
    receive
        {request, From, Msg} ->
            From ! {response, Msg},
            loop();
        stop -> ok
    end.

4.2 分布式注册 #

erlang
-module(dist_register).
-export([start/0, call/1]).

start() ->
    Pid = spawn(fun() -> loop() end),
    global:register_name(my_server, Pid).

call(Msg) ->
    global:whereis_name(my_server) ! {request, self(), Msg},
    receive
        {response, Response} -> Response
    after 5000 -> timeout
    end.

loop() ->
    receive
        {request, From, Msg} ->
            From ! {response, Msg},
            loop()
    end.

五、Cookie安全 #

5.1 设置Cookie #

bash
erl -name node1@localhost -setcookie mycookie

5.2 代码中设置 #

erlang
erlang:set_cookie(node(), mycookie).

六、最佳实践 #

6.1 使用global注册 #

erlang
global:register_name(Name, Pid).
global:whereis_name(Name).
global:unregister_name(Name).

6.2 使用rpc模块 #

erlang
rpc:call(Node, Module, Function, Args).
rpc:cast(Node, Module, Function, Args).

七、总结 #

本章学习了:

  • 分布式概述
  • 节点操作
  • 分布式通信
  • 分布式应用
  • Cookie安全
  • 最佳实践
最后更新:2026-03-27