浏览 2775 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2010-04-30
最后修改:2010-05-09
最近老赵对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} 现在看起来有点像个服务器了 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |