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

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.

相关文章:

  • SQL视图:简化复杂查询的利器
  • python——python-docx
  • ffmpeg视频转切片m3u8并加密videojs播放hls.js播放dplayer播放(弹幕效果)
  • Mysql集群
  • 大模型时代下,软件检测行业将如何发展?
  • 我问Chat GPT:怎么提交app到苹果商店审核
  • 清除系统缓存提高写盘速度的tips
  • RedisTemplate集成+封装RedisUtil
  • 简述Glide的源码
  • 010 OSS文件上传
  • 【HarmonyOS】鸿蒙应用蓝牙功能实现 (三)
  • 【C++ Primer Plus习题】7.4
  • 源代码编译,Apache DolphinScheduler前后端分离部署解决方案
  • 【面试经验】美团基础研发部产品经理面试经验
  • 【HuggingFace Transformers】BertSelfOutput 和 BertOutput源码解析
  • 如何在路由器中抓包分析
  • 纯原生-如何在不破解情况下使用Android监听支付宝微信收款消息
  • JavaScript中DOW和BOW;笔记分享;知识回顾
  • 欧科云链: Web3浪潮下合规是“必选项”, 技术创新成发展重点
  • 手把手教你用jmeter做压力测试(详图)
  • 马上评|科学谋划“十五五”,坚定不移办好自己的事
  • 科学家为AI模型设置“防火墙”,以防止被不法分子滥用
  • 王毅:妥协退缩只会让霸凌者得寸进尺
  • 现场|西岸美术馆与蓬皮杜启动新五年合作,新展今开幕
  • 第二艘国产大型邮轮爱达·花城号完成坞内起浮
  • 南阳市委原书记朱是西被“双开”:搞劳民伤财的“政绩工程”