Help us understand the problem. What is going on with this article?

Erlangのrpcを試してみる。

More than 3 years have passed since last update.

これの続きです:http://qiita.com/syuhei/items/70fc971ce7ce40dee439

前回はHello Worldプロジェクトを作成しました。今回は分散プログラミングの基本となる、rpcモジュールを使ってみます。

myproject_app.erlにhello関数を追加します。exportに追加するのも忘れずに。

-export([start/2, stop/1, hello/1])
.
.
.

hello(Str) ->
    "Hello "++Str.

testフォルダを作成し、myproject_SUITE.erlを作成します。

このテストではrunner@{host名}からcluster_test@{host名}のjoin関数を呼び出しています。start_node関数が、新しくテスト用のノードを起動する関数です。

-module(myproject_SUITE).

-compile(export_all).

all() ->
    [cluster_test].

init_per_suite(_Config) ->
    {ok, Hostname} = inet:gethostname(),
    case net_kernel:start([list_to_atom("runner@"++Hostname), shortnames]) of
        {ok, _} -> ok;
        {error, {already_started, _}} -> ok
    end,
    _Config.

end_per_suite(_Config) ->
    application:stop(lager),
    _Config.

cluster_test(_Config) ->
    Node = start_node(cluster_test),
    R = rpc:call(Node, myproject_app, hello, ["World"]),
    ct:log("Result:~p, ", [R]),
    ct_slave:stop(Node).




start_node(Name) ->
    CodePath = lists:filter(fun filelib:is_dir/1, code:get_path()),
    NodeConfig = [
            {monitor_master, true},
            {startup_functions, [
                    {code, set_path, [CodePath]}
                    ]}],
    case ct_slave:start(Name, NodeConfig) of
        {ok, Node} ->
            rpc:call(Node, application, ensure_all_started, [myproject_app]),
            Node;
        {error, already_started, Node} ->
            ct_slave:stop(Name),
            start_node(Name);
        {error, Reason, Node} ->
            io:format("error ~p~n", [Reason])
    end.


テストコマンドを打ちます。

$ ./rebar3 ct
===> Running Common Test suites...
%%% myproject_SUITE ==> cluster_test: OK
All 1 tests passed.

ちなみにログフォルダにテスト結果のHTMLもあります。./_build/test/logs/

runner@{host名}から"World"を送って、cluster_test@{host名}で"Hello "と連結すして、"Hello World"をrunner@{host名}に返しています。

スクリーンショット 2016-11-11 23.17.19.png

以上、簡単なrpcモジュールの使い方でした。

iotlt
IoT縛りの勉強会です。 毎月イベントを実施しているので是非遊びに来てください! 登壇者を中心にQiitaでも情報発信していきます。 https://iotlt.connpass.com
https://iotlt.connpass.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away