English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Erlang OTP

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}.

이 코드는 실제로 두 가지 작업을 수행합니다. 서버 프레임워크 코드에서 호출되는 콜백 모듈로서 기능하며, 동시에 클라이언트가 호출할 인터페이스 서브루틴을 포함하고 있습니다. OTP의 일반 관행은 두 가지 함수를 동일한 모듈에 결합하는 것입니다.

따라서 이는 위의 프로그램이 실행되는 방식입니다-

제목erl다음은, 서버 프로그램을 실행하기 위해 실행해야 할 첫 번째 명령어입니다.

server(name_server,name_server)

다음과 같은 출력을 얻을 수 있습니다-

출력 결과

true

그런 다음, 다음 명령어를 실행합니다

name_server.add(erlang,”w3codebox).

다음과 같은 출력을 얻을 수 있습니다-

출력 결과

Ok

그런 다음, 다음 명령어를 실행합니다-

name_server.whereis(erlang).

다음과 같은 출력을 얻을 수 있습니다-

출력 결과

{ok,"w3codebox"}