erlang客户端程序学习(一)

本文介绍了一个使用Erlang实现的简单面积计算服务,该服务可以计算矩形和圆形的面积,并通过RPC方式进行调用。经过多次改进,最终实现了更高效稳定的远程过程调用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

area_server.erl

-module(area_server).
-export([loop/0]).
loop() ->
    receive
        {rectangle, Width, Ht} ->
            io:format("Area of rectangle is ~p~n", [Width * Ht]),
            loop();
        {circle, R} ->
            io:format("Area of circle is ~p~n", [3.14*R*R]),
            loop();
        Other ->
            io:format("I do not know what the area of a ~p is ~n", [Other]),
            loop()
    end.


测试过程:
1> c(area_server).
{ok,area_server}
2> Pid = spawn(fun area_server:loop/0).
<0.39.0>
3> Pid ! {circle, 67}.
Area of circle is 14095.46
{circle,67}

第一次改进:


-module(area_server).
-export([loop/0, rpc/2]).
rpc(Pid, Request) ->
    Pid ! {self(), Request},
    receive
        Response ->
            Response
    end.
loop() ->
    receive
        {From, {rectangle, Width, Ht}} ->
            From ! {rectangle, Width*Ht},
            loop();
        {From, {circle, R}} ->
            From ! {circle, 3.14*R*R},
            loop();
        {From, Other} ->
            Error = "Sorry, error!",
            From ! {Error,Other},
            loop()
    end.

测试:
4> c(area_server).
{ok,area_server}
6> Pid = spawn(fun area_server:loop/0).
<0.53.0>
7> area_server:rpc(Pid, sockes).      
{"Sorry, error!",sockes,ok}

改进2:


-module(area_server).
-export([loop/0, rpc/2]).
rpc(Pid, Request) ->
    Pid ! {self(), Request},
    receive
        {Pid, Response} ->
            Response
    end.
loop() ->
    receive
        {From, {rectangle, Width, Ht}} ->
            From ! {self(), Width*Ht},
            loop();
        {From, {circle, R}} ->
            From ! {self(), 3.14*R*R},
            loop();
        {From,Other} ->
            From ! {self(), error, Other},
            loop()
    end.


测试:
2> c(area_server).
{ok,area_server}
3> Pid = spawn(fun area_server:loop/0).
<0.43.0>
4> area_server:rpc(Pid, {rectangle, 8, 6}).
48
改进3:

-module(area_server).
-export([start/0]).
start() ->
    Pid = spawn(fun loop/0),
    rpc(Pid, {rectangle, 8, 6}).
rpc(Pid, Request) ->
    Pid ! {self(), Request},
    receive
        {Pid, Response} ->
            Response
    end.
loop() ->
    receive
        {From, {rectangle, Width, Ht}} ->
            From ! {self(), Width*Ht},
            loop();
        {From, {circle, R}} ->
            From ! {self(), 3.14*R*R},
            loop();
        {From,Other} ->
            From ! {self(), error, Other},
            loop()
    end.


测试:
2> c(area_server).
{ok,area_server}
3> area_server:start().
48
4> area_server:start().
48
5>
<script>window._bd_share_config={"common":{"bdsnskey":{},"bdtext":"","bdmini":"2","bdminilist":false,"bdpic":"","bdstyle":"0","bdsize":"16"},"share":{}};with(document)0[(getelementsbytagname('head')[0]||body).appendchild(createelement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new date()/36e5)];</script>
阅读(731) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2011-03-15 19:57:53

erlang---不能错过的盛宴 http://hi.baidu.com/my2008space/blog/item/89b6aa1f51b8510b413417da.html

评论热议
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值