上一篇写了一个服务器,包括基本的请求响应,服务关闭等功能,但是这并不是服务器的全部。
一般来说,服务器应当内部保存若干数据,这些数据参与对request的运算,然后生成response,有时候,这些计算还会改变服务器上的数据本身。我们可以把这些数据抽象为服务器的"状态",当服务器启动时,状态数据被初始化(初始化的工作应该根据环境有所区别)。
话说的真累,其实这就是大名鼎鼎的有限状态机 :-)
看代码:
% my_server4.erl %
-module(my_server4).
-export([start/1,init/1]).
start(Env) -> spawn(my_server4,init,[Env]).
init(Env) ->
State = Env,
loop(State).
loop(State) ->
receive
{ request,From,Request } ->
{Res,State2} = deal_with(Request,State),
From ! {Res},
loop(State2);
stop ->
io:format("process stopped.last state is ~p~n",[State])
end.
deal_with(Request,State) -> {State,Request}.
测试
Eshell V5.7.2 (abort with ^G)
1> c(my_server4),c(my_client).
{ok,my_client}
2> C = my_client:start(),S = my_server4:start("init").
<0.45.0>
3> S ! {request, C, "changed"}.
client - {"init"}
{request,<0.44.0>,"changed"}
4> S ! stop.
process stopped.last state is "changed"
stop
分享到:
相关推荐
erlang-solutions-1.0-1.noarch.rpm erlang-solutions-1.0-1.noarch.rpm
- 使用yum安装Erlang:`sudo yum install erlang-23.3.4.3-1.el7.x86_64.rpm` 2. **安装RabbitMQ**: - 下载RabbitMQ RPM包:`wget https://your_download_link/rabbitmq-server-3.8.17-1.el7.noarch.rpm` - ...
erlang-sd_notify-1.0-2.el7.x86_64.rpm
erlang-xmerl-23.0.2-2.el7.x86_64.rpm,rabbitMQ安装需要依赖此环境。Erlang 是一种多用途编程语言,主要用于开发并发和分布式系统。它最初是一种专有的编程语言,Ericsson 使用它来开发电话和通信应用程序。
erlang-xmerl-22.3-1.el7.x86_64.rpm,rabbitMQ安装需要依赖此环境。Erlang 是一种多用途编程语言,主要用于开发并发和分布式系统。它最初是一种专有的编程语言,Ericsson 使用它来开发电话和通信应用程序。
erlang-20.3.8.17-1.el7.centos.x86_64
erlang-xmerl-22.2-1.el7.x86_64.rpm,rabbitMQ安装需要依赖此环境。Erlang 是一种多用途编程语言,主要用于开发并发和分布式系统。它最初是一种专有的编程语言,Ericsson 使用它来开发电话和通信应用程序。
erlang-19.3.6.4-1.el
erlang-21.3.8.11-1.el6.x86_64.rpm
对应rabbitmq 3.12.4,亲测可用
erlang-23.2.7-1.el7.x86_64 .rpm
linux基于centos7.x,erlang21.3.8.16资源适配rabbitmq3.8.5。欢迎大家下载!!!!
erlang-xmerl-23.0.3-1.el7.x86_64.rpm,rabbitMQ安装需要依赖此环境。Erlang 是一种多用途编程语言,主要用于开发并发和分布式系统。它最初是一种专有的编程语言,Ericsson 使用它来开发电话和通信应用程序。
erlang-21.3.8.15-1.el7.x86_64.rpm
配套rabbitmq-server-3.8.17-1.el8.noarch.rpm
erlang-21.3.7.1-1.el7.x86_64.rpm rabbitmq基础语言环境。
rabbitmq安装前需要安装erlang包,如果没有erlang包,rabbitmp则无法下载成功
erlang-20.3.6-1.el7.centos.x86_64.rpm erlang-20.3.6-1.el7.centos.x86_64.rpm erlang-20.3.6-1.el7.centos.x86_64.rpm erlang-20.3.6-1.el7.centos.x86_64.rpm erlang-20.3.6-1.el7.centos.x86_64.rpm
esl-erlang_24.2.1-1_centos_7_amd64.rpm