当前位置: 首页 > article >正文

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

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

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

-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) ->
  if
    K > 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.

面积服务器代码


-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.kler.cn/news/283480.html

相关文章:

  • SQL 优化实践:从慢查询到高性能更新
  • Sinc Function介绍
  • 【Python机器学习】NLP词频背后的含义——距离和相似度
  • 【二叉树进阶】--- 前中后序遍历非递归
  • python之zip函数
  • 【大模型系列篇】词向量 - 从Word2Vec到ELMo
  • C# 匿名函数 delegate(参数...){ }
  • LeetCode 热题100-41 二叉树的层序遍历
  • 如何使用 Pytest 进行测试
  • SSRF和CSRF实战复现
  • 【自动驾驶】决策规划算法概述
  • Kafka消息积压的典型场景及解决方案
  • SSRF以及CSRF
  • Vue3.0项目实战(二)——大事件管理系统登录注册功能实现
  • 快讯 | Midjourney开拓硬件领域:苹果前经理加盟助力发展
  • 防御Nginx负载均衡中的拒绝服务攻击:策略与实践
  • OpenCV详细介绍
  • Eureka的生命周期管理:服务注册、续约与下线的完整流程解析
  • uniapp,uview:inputnumber或者input,当type为number的时候,在ios里输入不了小数的问题
  • 本地部署aniportrait
  • 【Redis】Redis 的消息队列 List、Streams—(六)
  • Golang测试func TestXX(t *testing.T)的使用
  • 【GPT】Coze使用开放平台接口-【2】创建工作流-语音伪造检测工作流
  • Golang | Leetcode Golang题解之第375题猜数字大小II
  • XSS漏洞
  • 数组、向量与矩阵
  • 【Unity优化】优化Android平台拖动地图表现
  • zabbix安装过程中仓库不可用问题解决
  • uniapp中H5网页怎么实现自动点击事件
  • 自动化测试经典面试题