首页 > 其他分享 >无涯教程-Erlang - OTP

无涯教程-Erlang - OTP

时间:2023-12-03 22:31:44浏览次数:36  
标签:name Mod 无涯 server rpc add OTP Erlang Name

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.

关于上述程序,需要注意以下几点:

  • 使用注册功能在系统中注册的过程。

  • 该进程产生一个循环函数来处理该处理。

现在,让我们编写一个客户端程序。

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

该代码实际上执行两个任务。它用作从服务器框架代码中调用的回调模块,同时,它包含将由客户端调用的接口示例。

在 erl 中,首先通过运行以下命令来运行服务器程序。

server(name_server,name_server)

您将获得以下输出-

true

然后,运行以下命令

name_server.add(erlang,”Learnfk”).

您将获得以下输出-

Ok

然后,运行以下命令 -

name_server.whereis(erlang).

您将获得以下输出-

{ok,"Learnfk"}

参考链接

https://www.learnfk.com/erlang/erlang-otp.html

标签:name,Mod,无涯,server,rpc,add,OTP,Erlang,Name
From: https://blog.51cto.com/u_14033984/8669241

相关文章

  • 无涯教程-Erlang - 端口
    在Erlang中,端口用于不同程序之间的通信,Socket是一个通信端点,允许计算机使用Internet协议(IP)通过Internet进行通信。端口协议类型有2种类型的协议可用于通信。一个是UDP,另一个是TCP,UDP允许应用程序相互发送短消息(称为数据报),但是不能保证这些消息的传递。他们也可能无秩序到......
  • 无涯教程-Erlang - 邮件
    要使用Erlang发送电子邮件,您需要使用github可用的软件包,github链接是-https://github.com/Vagabond/gen_smtp该链接包含smtp实用程序,可用于从Erlang应用程序发送电子邮件,请按照以下步骤操作,以便能够从Erlang发送电子邮件步骤1 -从github站点下载erl文件,这些文件应下......
  • 无涯教程-Erlang - 进程
    Erlang中的这些过程与大多数人熟悉的过程和线程不同,Erlang进程是轻量级的,与其他进程(内存)隔离运行,并且由Erlang的虚拟机(VM)调度。进程的创建时间非常短,刚生成的进程的内存占用非常小,单个ErlangVM可以运行数百万个进程。借助spawn方法创建一个进程。该方法的一般语法如下。s......
  • 无涯教程-Erlang - BIFS
    BIF是Erlang中内置的函数,他们通常执行无法在Erlang中编程的任务,如,不可能将列表变成元组,为了执行这样的操作,我们称为BIF。让我们举一个如何使用BIF的示例--module(helloLearnfk).-export([start/0]).start()->io:fwrite("~p~n",[tuple_to_list({1,2,3})]),io:......
  • 无涯教程-Erlang - 函数
    Fun用于在Erlang中定义匿名函数,匿名函数的一般语法如下:F=fun(Arg1,Arg2,...ArgN)->...EndF                  - 这是分配给匿名函数的变量名。Arg1,Arg2,...ArgN - 这些是传递给匿名函数的参数。以下示例展示了如何......
  • 无涯教程-Erlang - 预处理
    在编译Erlang模块之前,它会由Erlang预处理程序自动处理,预处理器会扩展源文件中可能存在的所有宏,并插入任何必要的包含文件。通常,您不需要查看预处理器的输出,但是在特殊情况下(如,调试错误的宏时),您可能希望保存预处理器的输出,要查看模块some_module.erl的预处理输出,请提供OSShe......
  • 无涯教程-Erlang - 异常处理
    任何编程语言都需要异常处理来处理运行时错误,以便可以维护应用程序的正常流程。通常,当Erlang中发生异常或错误时,将显示以下消息。{"initterminatingindo_boot",{undef,[{helloLearnfk,start,[],[]},{init,start_it,1,[]},{init,start_em,1,[]}]}}故障转储将被写入-erl_......
  • 无涯教程-Erlang - Records(记录)
    Erlang具有创建records记录函数,这些records记录由字段组成,例如,您可以定义一个personal records,其中包含2个字段,一个是id,另一个是name字段。然后,您可以在Erlang中创建此records记录的各种实例,以定义具有不同名称和ID的多个personal。创建记录使用record标识符创建,在此record......
  • 无涯教程-Erlang - Maps(映射)
    Maps中的每个键-值(key-value)关联称为关联对,该对中的键和值部分称为元素,关联对的数量被称为Map的大小。我们定义了具有2个Maps的MapM1,map_size是用Erlang定义的内置函数,可用于查看Map的大小。-module(helloLearnfk).-export([start/0]).start()->M1=#{name=>john......
  • 无涯教程-Erlang - 文件I/O
    使用I/O时,Erlang提供了许多方法。它具有更简单的类,可为文件提供以下函数-读取文件写入文件查看文件是文件还是目录让我们探讨一下Erlang提供的一些文件操作,出于这些示例的目的,我们将假设有一个名为NewFile.txt的文件,其中包含以下文本行Example1Example2Example3在以下......