erlang学习:用OTP构建系统3,应用程序服务器

ops/2024/12/23 5:12:55/

按照书上搭建两个服务器,一个是质数服务器,一个是面积服务器

今天先按照书上的将这两个服务器的代码编写好,为后面监控树的学习做准备
质数服务器代码

erlang">-module(prime_server).
-behaviour(gen_server).-export([new_prime/1, start_link/0]).
-export([init/1,handle_call/3,handle_cast/2,handle_info/2,terminate/2,code_change/3]).start_link() ->gen_server:start_link({local, ?MODULE}, ?MODULE, [], []).new_prime(N) ->gen_server:call(?MODULE, {prime, N}, 20000).init([]) ->process_flag(trap_exit, true),io:format("~p starting~n", [?MODULE]),{ok, 0}.handle_call({prime, K}, _From, N) ->{reply, make_new_prime(K), N + 1}.handle_cast(_Msg, N) ->{noreply, N}.handle_info(_Info, N) ->{noreply, N}.terminate(_Reason, _N) ->io:format("~p stopping~n", [?MODULE]),ok.code_change(_OldVsn, N, _Extra) ->{ok, N}.make_new_prime(K) ->ifK > 100 ->alarm_handler:set_alarm(tooHot),N = lib_primes:make_prime(K),alarm_handler:clear_alarm(tooHot),N;true ->lib_primes:make_prime(K)end.

面积服务器代码

erlang">
-module(area_server).
-behaviour(gen_server).-export([area/1, start_link/0]).-export([init/1, handle_call/3, handle_cast/2, handle_info/2, terminate/2, code_change/3]).start_link() ->gen_server:start_link({local, ?MODULE}, ?MODULE, [], []).area(Thing) ->gen_server:call(?MODULE, {area, Thing}).init([]) ->process_flag(trap_exit, true),io:format("~p starting~n", [?MODULE]),{ok, 0}.handle_call({area, Thing}, _From, N) ->{reply, compute_area(Thing), N + 1}.handle_cast(_Msg, N) ->{noreply, N}.handle_info(_Info, N) ->{noreply, N}.terminate(_Reason, _N) ->io:format("~p stopping~n", [?MODULE]),ok.code_change(_OldVsn, N, _Extra) -> {ok, N}.compute_area({square, X}) ->X * X;
compute_area({rectongle, X, Y}) ->X * Y.

http://www.ppmy.cn/ops/103282.html

相关文章

【#第三期实战营闯关作业##LMDeploy 量化部署进阶实践 】

今天学习了《LMDeploy 量化部署进阶实践》一课,,收获很大。以下是记录复现过程及截图: 创建一个名为lmdeploy的conda环境 创建成功后激活环境并安装0.5.3版本的lmdeploy及相关包。 相关包install成功 创建好的conda环境并启动InternLM2_5-7…

【需要学会的Java知识 1】Java的Map增强

使用这些你需要有以下依赖: <dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>${hutool.version}</version></dependency><dependency><groupId>com.google.guava</grou…

android 离线的方式使用下载到本地的gradle

1、android studio在下载gradle的时候&#xff0c;特别慢&#xff0c;有的时候会下载不完的情况&#xff0c;这样我们就要离线使用了。 2、下载Gradle Gradle | Releases 或者 Releases gradle/gradle GitHub Gradle | Releases 这里我们下载8.10 complete版本&#xff0c…

milvus多个Querynode,资源消耗都打在一个节点上

milvus 查询时的原理 当读取数据时&#xff0c;MsgStream对象在以下场景中创建&#xff1a; 在 Milvus 中&#xff0c;数据必须先加载后才能读取。当代理收到数据加载请求时&#xff0c;会将请求发送给查询协调器&#xff0c;查询协调器决定如何将分片分配到不同的查询节点。…

循环队列 、二叉树

1、循环队列 特点&#xff1a;只允许在队尾入队&#xff0c;队头出队&#xff0c;遵循先进先出原则 不能随机访问&#xff0c;不能随机插入 1.1循环队列创建 定义两个指针分别指向队头&#xff0c;队尾。初始化队头&#xff0c;队尾为0&#xff1b; SeqQueue *CreateSeqQueue(…

python json jsonl 的用法

JSON JSON&#xff08;JavaScript Object Notation&#xff09;是一种轻量级的数据交换格式&#xff0c;广泛用于在客户端和服务器之间传输数据。以下是 Python 中使用 JSON 的一些常见用法&#xff1a; 1. 将 Python 对象转换为 JSON 字符串 使用 json.dumps() 函数将 Pyth…

Python | Leetcode Python题解之第386题字典序排数

题目&#xff1a; 题解&#xff1a; class Solution:def lexicalOrder(self, n: int) -> List[int]:ans [0] * nnum 1for i in range(n):ans[i] numif num * 10 < n:num * 10else:while num % 10 9 or num 1 > n:num // 10num 1return ans

C++语法基础(二)

C复合类型 结构体 1. C的结构&#xff0c;定义结构体类型的变量时&#xff0c;可以省略struct关键字 2. 可以定义成员函数&#xff0c;在结构体中的成员函数内部可以直接访问本结构体的成员&#xff0c;无需通过“.”或“->” 联合 1. C的联合,定义联合体类型的变…