~~~~~华丽的分割线~~~~
最近老赵
对C#和java进行比较的一篇博客引起了很多人的关注,但是我并不是很同意这个角度,我一直认为,一把钥匙一把锁,有明确针对性的语言是好语言,例如 erlang 之于分布式高可靠性系统,ruby 之于DSL类应用
学习Erlang的过程中,感觉它的语法其实很简单,比较强大的是它针对分布式系统所建构的基础设施,这个在语言层面和类层面都有考虑,这个系列blog就是我的学习总结。
~~~~~华丽的分割线~~~~
erlang更适合分布式服务端开发,让我们从一个服务器程序写起——
% my_server1.erl %
-module(my_server1).
-export([start/0]).
start() -> spawn(fun() -> loop() end).
loop() ->
receive
Request ->
io:format("server1,~p~n",[Request]),
loop()
end.
服务器需要对调用方进行响应,于是改造为
% my_server2.erl %
-module(my_server2).
-export([start/0]).
start() -> spawn(fun() -> loop() end).
loop() ->
receive
{callback,From,Request} ->
io:format("server 2,~p~n",[Request]),
From ! Request,
loop()
end.
编写一个client测试一下
% my_client %
-module(my_client).
-export([start/0]).
start() -> spawn(fun() -> loop() end).
loop() ->
receive
Msg -> io:format("client - ~p~n",[Msg])
end.
执行测试
Eshell V5.7.2 (abort with ^G)
1> c(my_server2),c(my_client).
{ok,my_client}
2> C = my_client:start(),S = my_server2:start().
3> S ! { callback, C, "hello" }.
server 2,"hello"
{callback,<0.88.0>,"hello"}
client - "hello"
这就是一个初级版本的服务器,可以看出,无论是开发还是测试,erlang写的代码都很简单。
这个服务器还很简陋的,例如,我们不能“优雅的”停止它。
那么怎样算是"优雅的"停止一个服务器?打个比方,对一个已经启动了的PC,直接拔掉电源就是“粗暴的”,而点击"开始" - “关机”,让windows自己关闭就是优雅的——这样,windows自己会决定如何释放资源,如何保护旧数据等等。
其实,服务器的所谓停止,骨子里也只是接受到了一个stop消息,真正的停止行为还是服务器自己完成的。“消息“?不错,其实就是一次receive
看代码:
% my_server3.erl %
-module(my_server3).
-export([start/0]).
start() -> spawn(fun() -> loop() end).
loop() ->
receive
{callback,From,Request} ->
Response = deal_with(Request),
From ! Response,
loop();
{stop} ->
io:format("server3 stopped~n")
end.
deal_with(Request) ->
io:format("server3 - ~p~n",[Request]),
"response".
进行测试
Eshell V5.7.2 (abort with ^G)
1> c(my_server3),c(my_client).
{ok,my_client}
2> C = my_client:start(),S = my_server3:start().
<0.45.0>
3> S ! { callback, C, "hello" }.
server3 - "hello"
{callback,<0.44.0>,"hello"}
client - "response"
4> S ! {stop}.
server3 stopped
{stop}
现在看起来有点像个服务器了
分享到:
相关推荐
RabbitMQ是一个开源的消息代理和队列服务器,它基于AMQP(Advanced Message Queuing Protocol)标准实现,允许应用程序之间进行异步通信。RabbitMQ 3.8.17-1.el7.noarch.rpm是适用于CentOS 7的最新稳定版本。它提供...
erlang-solutions-1.0-1.noarch.rpm erlang-solutions-1.0-1.noarch.rpm
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
erlang-sd_notify-1.0-2.el7.x86_64.rpm
erlang-xmerl-23.0.2-2.el7.x86_64.rpm,rabbitMQ安装需要依赖此环境。Erlang 是一种多用途编程语言,主要用于开发并发和分布式系统。它最初是一种专有的编程语言,Ericsson 使用它来开发电话和通信应用程序。
esl-erlang_24.2.1-1_centos_7_amd64.rpm
对应rabbitmq 3.12.4,亲测可用
erlang-xmerl-23.0.3-1.el7.x86_64.rpm,rabbitMQ安装需要依赖此环境。Erlang 是一种多用途编程语言,主要用于开发并发和分布式系统。它最初是一种专有的编程语言,Ericsson 使用它来开发电话和通信应用程序。
描述中提到的"rabbitmq-server-3.8.17-1.el8.noarch.rpm"是RabbitMQ服务器的一个版本,RabbitMQ是一个基于AMQP(Advanced Message Queuing Protocol)的消息代理,它使用Erlang语言编写。RabbitMQ允许应用程序通过...
erlang-21.3.7.1-1.el7.x86_64.rpm rabbitmq基础语言环境。
erlang-21.3.8.15-1.el7.x86_64.rpm
linux基于centos7.x,erlang21.3.8.16资源适配rabbitmq3.8.5。欢迎大家下载!!!!
配套rabbitmq-server-3.8.17-1.el8.noarch.rpm
rabbitmq安装前需要安装erlang包,如果没有erlang包,rabbitmp则无法下载成功
erlang-23.2.7-1.el7.x86_64 .rpm