erlang(1)
来源:互联网 发布:搜索引擎排名数据 编辑:程序博客网 时间:2024/05/17 23:50
%%server1.erl:-module(server1)-export([start/2,rpc/2])start(Name,Mod)-> register(Name,spawn(fun()->loop(Name,Mod,Mod:init())end)).rpc(Name,Request)-> Name!{self(),Request}, receive {Name,Response}->Response end.loop(Name,Mod,State)-> receive{From,Request}->{Response,State1}=Mod:handle(Request,State),From!{Name,Response},loop(Name,Mod,State1) end.
这段代码实现了一个基本的服务器功能。
与常见的服务器不同,这个服务器不处理具体的业务,而是在接收到请求后调用传进来模块的相应方法(handle)去处理。
第二,这个服务器提供了向指定的进程发送指定消息的功能,个人觉得把这个rpc放到回调模块中可能更容易理解。
%%name_server:-module(name_server).-export([init/0,add/2,whereis/1,handle/2]).-import(server1,[rpc/2]).add(Name,Place)->rpc(name_server,{add,Name,Place}).whereis(Name)->rpc(name_server,{whereis,Name}).init()->dict:new().handle({add,Name,Place},Dict)->{ok,dict:store(Name,Place,Dict)};handle({whereis,Name},Dict)->{dict:find(Name,Dict),Dict}.这是一个回调模块,可用于初始化服务器,提供服务器调用的接口,并进行具体的业务实现。 在JAVA,C# 等编程语言中,一般都是接口和具体的实现分开的,所以这是erlang与他们不同的地方之一。
下面是具体的运行:
1>server1:start(name_server,name_server).true2>name_server:add(joe,"at home").ok3>name_server:whereis(joe).{ok,"at home"}
第一句代码运行后我们启动了一个进程,这个进程先调用了name_server:init,然后等待处理客户端进程发送过来的请求。一但接收到请求,就调用初始化模块name_server:handle/2 去处理,并将结果发送回客户端进程。
第二句代码,我们使用了服务器提供的发送请求的功能,向name_server进程发送了{add,joe,"at home"} 这样的消息。服务器接收到后就调用name_server回调模块中的handle方法去处理。
第三句代码又向name_server进程发送了{whereis,joe} 这样的消息,服务器进程接收到后同样调用name_server回调模块中的handle方法去处理。
在这里其实是涉及到三个东西的:被注册为name_server的服务器进程;shell所在的客户端进程;可以用来初始化服务器进程,并做具体业务实现的回调模块name_server。
- erlang(1)
- [Erlang 0110] Erlang Abstract Format , Part 1
- Erlang(1):安装erlang虚拟机
- Erlang 语言入门-1
- 感受 Erlang(1)
- erlang学习笔记1
- Erlang 笔记 1
- erlang学习1
- Erlang学习初探-1
- erlang编程基础-1
- 初识Erlang(1)
- Erlang编程实战1
- Erlang并发编程1
- Erlang 笔试题 1
- Erlang gen_tcp补充(1)
- erlang学习1 -- 入门
- Erlang学习笔记(1) --
- erlang snmp初学(1)
- oracle里判断字符串是否是日期格式
- Ajax提交与submit提交对比
- ^_^
- win7 下安装 xp (不用第三方软件)
- 策略模式与简单工厂模式
- erlang(1)
- 程序员有趣的面试题
- Hibernate---inverse,cascade(2)
- 网络中心节点的选举算法
- Fitnesse之框架介绍(二)
- WIN7下怎样装Oracle 10g
- C++中几个常用的小技巧
- 《java编程思想》第四章 练习9&练习10
- memcmp