私は倹約は、TCP / IPベースのクライアントサーバーアーキテクチャマルチ言語サポートRPCフレームワークである、と思います。
以下の手順を実行する、開発する倹約+のerlangを使用します。
倹約の1.理解。
倹約機能は確かに強力ですが、ドキュメントの貯蓄不足が、それは確かに欠陥がある、APIドキュメントの、特に特定の言語が欠落している、インターネットは基本的にJavaのAPIドキュメントです。ここでは、文書の私のコレクションの一部は、倹約の定義および使用は、それは倹約の言うことができる特定のプレゼンテーション、データ入力を必要としています。
そこPDFドキュメントをダウンロードすることができ、15、Dapperの、私は倹約を理解するために、この文書をお読みください。
倹約ホワイトペーパーでは、倹約の歴史と使命を紹介しています。
Apacheの倹約 - スケーラブルなクロス言語サービス開発フレームワーク
Java開発者は見ることができます使用してください。
倹約を導入した機能のいくつか
コンテンツはように使用して、インストールのシリーズが含まれています。
文書のこのシリーズを読んだ後、倹約、使用、および特性の定義が直面する問題のより深い理解を低減することが可能になります。
一般的な手順の2.thrift開発
倹約アーランを使用 アーラン+リサイクルに使用される一般的な手順と呼ばれます。
第一步:编写相应的*.thrift 文件
第二步:thrift --gen erl *.thrift,将生成的gen-erl复制到src中
第三步:按照例子代码写一个模块,将*.thrift中的函数全都实现了,并在里面指定服务的端口号和启动thrift的框架
第四步:将上一步写的模块添加到整个程序启动过程的最末处,启动thrift开始对外提供服务。
3.thriftと戦闘アーラン
まず、経験のコードを読んでいるボーエンを、以下、倹約のためのErlangのコードを理解します
このブログを読んだ後、私たちは倹約+アーランの開発を開始しました。
倹約+ Erlangの使用例は、倹約のerlangサーバープログラムを開発するために、基本的に使用することができる、この例を理解し、チュートリアル内の倹約ソースを持っています。
ここでは、私が使用して別の例であり、それはインターネットの別の例は次のとおりです。
最初のテストスリフト (所有ラダー)
倹約Erlangの接着剤 (自己ラダー)
Hello.thrift定義ファイル:
service Hello{
string say(1:string name)
}
ERLファイルを生成します。
thrift --gen erl hello.thrift
私たちに必要なコードをErlangのがGEN-ERLディレクトリ。
#ls gen-erl/
hello_constants.hrl hello_thrift.erl hello_thrift.hrl hello_types.erl hello_types.hrl
オープンhello_thrift.erl、次のとおりです。
%%
%% Autogenerated by Thrift Compiler (0.9.1)
%%
%% DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
%%
-module(hello_thrift).
-behaviour(thrift_service).
-include("hello_thrift.hrl").
-export([struct_info/1, function_info/2]).
struct_info('i am a dummy struct') -> undefined.
%%% interface
% say(This, Name)
function_info('say', params_type) ->
{struct, [{1, string}]}
;
function_info('say', reply_type) ->
string;
function_info('say', exceptions) ->
{struct, []}
;
function_info(_Func, _Info) -> no_function.
この方法は、見ることができる、上記で定義された言う型パラメータが異常、型情報を返す、内部hello_thrift.erlの方法があると言います。
これは、内部の任意のタイプのhello.thriftを定義していないので、何の物質がhello_types.erlではありません。
上記の例からの眺め、アイデアは、種類やサービスに従って命名Erlangのファイルを生成することです。
GEN-ERLのディレクトリでは、新しいファイルhello_server2.erlを作成し、
-module(hello_server2).
-include("hello_thrift.hrl").
-export([start/0, handle_function/2, say/1, stop/1]).
debug(Info)->
io:format("Debug info:~s~n",[Info]).
say(Name)->
io:format("~n Line:~p~n", [?LINE]),
Sentence = "Hello," ++ Name,
debug(Sentence),
BinSentence = list_to_binary(Sentence),
BinSentence.
start()->
start(9090).
start(Port)->
Handler = ?MODULE,
thrift_socket_server:start([{handler, Handler},
{service, hello_thrift},
{port, Port},
{name, hello_server}]).
stop(Server)->
thrift_socket_server:stop(Server).
handle_function(Function, Args) when is_atom(Function), is_tuple(Args) ->
case Function of
say ->
{reply, say(tuple_to_list(Args))};
% add function here
_ ->
error
end.
この参照hello_server2.erlと貯蓄-0.9.1 /チュートリアル/ ERL / server.erl場合、ほとんどその構造を見つけることができます。
RPCへのアクセスを処理するためのサービス、輸出handle_function / 2機能を起動する/ 1の機能を起動します。コードの一般的な考え方は、thrift_socket_server使用することです。
一般的な考え方は、handle_functionでエクスポートする関数定義を追加します倹約ファイル、および/付加機能コード2で、見ることができます。倹約フレームワークは本当に開発時間のプログラマを保存します。
アーランは直接コードに、クライアントの開発倹約するだけでなく、比較的容易な操作を行い使用します。
-module(hello_client).
-include("hello_thrift.hrl").
-export([test/0]).
p(X)->
io:format("in the p() ~w~n", [X]),
ok.
test()->
Port = 9090,
{ok, Client0} = thrift_client_util:new("localhost",
Port,
hello_thrift, []),
io:format("~n Client0 : ~p~n", [Client0]),
{Client1, Res} = thrift_client:call(Client0, say, ["world"]),
io:format(" the Res is ~p~n", [Res]),
io:format("~n Client1 : ~p~n", [Client1]),
p(Res),
io:format("the Client0 == Client1: ~p~n", [Client0 == Client1]),
thrift_client:close(Client1),
ok.
デモマップ:
ます。https://my.oschina.net/u/191928/blog/618617で再現