English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
OTPはオープンテレコミュニケーションプラットフォームの略称です。これはアプリケーションオペレーティングシステムであり、大規模、容错、分散型アプリケーションを構築するためのライブラリとプロセスのセットです。OTPを使用したい場合は、 あなた自身のプログラムを書いてみると、OTP行動が非常に役立つ核心概念であることに気づくでしょう。行動は一般的な行動パターンを封装しており、コールバックモジュールパラメータ化されたアプリケーションフレームワークと考えられます。
OTPの強力な機能は、その容错性、可伸張性、動的コードアップグレードなどの特性から来ています。これらの特性は、行動自体で提供できます。したがって、最初の基本的な概念は、OTP環境の基本を模倣するサーバーコンポーネントを作成することです。以下の同じ例を見てみましょう。
-module(server). -export([start/2, rpc/2]). start(Name, Mod) -> register(Name, spawn(fun() -> loop(Name, Mod, Mod:init()) end)). rpc(Name, Request) -> Name ! {self(), Request}, receive {Name, Response} -> Response end. loop(Name, Mod, State) -> receive {From, Request} -> {Response, State1} = Mod:handle(Request, State), From ! {Name, Response}, loop(Name, Mod, State1) end.
上記のプログラムについて、以下の点に注意してください:
register関数を使用してシステムに登録されたプロセスに。
このプロセスは、そのプロセスを処理するループ関数を生成します。
今、サーバープログラムを利用するクライアントプログラムを書いてみましょう。
-module(name_server). -export([init/0, add/2, whereis/1, handle/2]). -import(server1, [rpc/2]). add(Name, Place) -> rpc(name_server, {add, Name, Place}). whereis(Name) -> rpc(name_server, {whereis, Name}). init() -> dict:new(). handle({add, Name, Place}, Dict) -> {ok, dict:store(Name, Place, Dict)}; handle({whereis, Name}, Dict) -> {dict:find(Name, Dict), Dict}.
このコードは実際には2つのタスクを実行しています。それは、サーバーフレームワークコードから呼び出されるコールバックモジュールを充当し、同時にクライアントが呼び出すインターフェースルーチンを含んでいます。OTPの一般的な慣習は、2つの関数を同じモジュールに組み合わせることです。
したがって、これは上記のプログラムが実行する方法です-
のerl中、まず以下のコマンドを実行してサーバープログラムを実行します。
server(name_server,name_server)
以下の出力を得ます-
出力結果
true
次に、以下のコマンドを実行します
name_server.add(erlang,”w3codebox()).
以下の出力を得ます-
出力結果
Ok
次に、以下のコマンドを実行します-
name_server.whereis(erlang).
以下の出力を得ます-
出力結果
{ok,"w3codebox"}