gen_server的一些心得
gen_server并不是我原来概念中的tcp_server或者udp_server的概念,只是一个纯粹的消息服务器,另外,附上它的一些回调函数的简单说明参考地址
http://hi.baidu.com/software_one/item/f5b07aeda3ac61215a2d64cd
● init/ - 服务器的初始化; ● handle_call/ - 处理对服务器的同步调用。调用服务器的客户端被阻塞,直到本函数返回。 ● handle_cast/ - 处理对服务器的异步调用。调用的执行过程中,客户端不被阻塞。 ● handle_info/ - 是起着“收容”作用的函数。服务器收到的信息,如果不是同步调用或异步调用,就交由这个函数处理。例如,如果你的服务器与其他进程相连接,那么,要求退出进程的信息,就是这个函数处理。
比如,别人拿到了gen_server的pid,给pid发消息,那么,消息会在这里被处理 ● terminate/ - 关闭服务器时,调用这个函数,做些善后处理。
● code_change/ - 服务器运行中更新时,调用这个函数。在后面的文章中,会涉及这个函数的大量细节,但你应该至少会按照基本要求使用它。
贴上一个例子
-module(new_storage).
-behaviour(gen_server). -export([start/0,stop/,add/,find/]). -export([init/,handle_call/,handle_cast/,handle_info/,terminate/,code_change/]). start()->
gen_server:start_link({local,?MODULE},?MODULE,[],[]). stop(Name)->
gen_server:cast(Name, stop). add(Name,Key,Value)->
gen_server:call(Name,{add,Key,Value}). find(Name,Key)->
gen_server:call(Name,{find,Key}). %% callbacks of gen_server
init([])->
{ok,dict:new()}. handle_call({add,Key,Value},_From,Dict)->
Reply = dict:store(Key,Value,Dict),
{reply,ok,Reply};
handle_call({find,Key},_From,Dict)->
Reply = dict:find(Key,Dict),
{reply,Reply,Dict}. handle_cast(stop, State) ->
{stop, normal, State};
handle_cast(_Msg,State)->
{noreply,State}. handle_info(_Info,State)->
{noreply,State}. terminate(_Reason,_State)->
io:format("terminate trapped~n"),
ok. code_change(_OldVsb,State,_Extra)->
{ok,State}.
示例:
>{ok,Pid}=new_storage:start().
{ok,<0.97.>}
> new_storage:add(Pid,testKey,testValue).
ok
> new_storage:find(Pid,testKey).
{ok,testValue}
> new_storage:stop(Pid).
terminate trapped
ok
>
gen_server的一些心得的更多相关文章
- 我的MYSQL学习心得(一) 简单语法
我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(五) 运 ...
- NoSql数据库使用半年后在设计上面的一些心得
NoSql数据库这个概念听闻许久了,也陆续看到很多公司和产品都在使用,优缺点似乎都被分析的清清楚楚.但我心里一直存有一个疑惑,它的出现究竟是为了解决什么问题? 这个疑惑非常大,为此我看了很多分析文章, ...
- 我的MYSQL学习心得(二) 数据类型宽度
我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(五) 运 ...
- 我的MYSQL学习心得(三) 查看字段长度
我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(五) 运 ...
- 我的MYSQL学习心得(四) 数据类型
我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(五) 运 ...
- 我的MYSQL学习心得(五) 运算符
我的MYSQL学习心得(五) 运算符 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据 ...
- 我的MYSQL学习心得(六) 函数
我的MYSQL学习心得(六) 函数 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类 ...
- 我的MYSQL学习心得(七) 查询
我的MYSQL学习心得(七) 查询 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类 ...
- 我的MYSQL学习心得(八) 插入 更新 删除
我的MYSQL学习心得(八) 插入 更新 删除 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得( ...
随机推荐
- ixgbe RSS原理分析
这个月,一直在搞ixgbe RSS,希望能使得收包均衡,结果没成功,但是对网卡的收包原理理解得更深入些. 1.网卡硬件通过网线或者光纤收包. 2.网卡的RSS功能根据网络五元组计算得到32bit的ha ...
- Mac OS X 下部分Android手机无法连接adb问题之解决方案
[原文] 时至当今,Android山寨手机厂商已如此之多,能修改和个性化定制Android OS的能人已是多如牛毛,有的牛人修改Android系统只会影响所修改的点,不会影响其它,然后还有的就不多说 ...
- 新东方雅思词汇---8.3、apt
新东方雅思词汇---8.3.apt 一.总结 一句话总结:本身为词根 adj. 恰当的:有…倾向的:灵敏的 本身为词根 英 [æpt] 美 [æpt] adj. 恰当的:有…倾向的:灵敏的 n. ...
- HostFileChangeMonitor
HostFileChangeMonitor 类是 FileChangeMonitor 类型的具体实现. 此类密封,因此无法扩展. 如果要使用现有缓存实现以及监视更改的文件和目录,此类非常有用. 对于每 ...
- tflearn kears GAN官方demo代码——本质上GAN是先训练判别模型让你能够识别噪声,然后生成模型基于噪声生成数据,目标是让判别模型出错。GAN的过程就是训练这个生成模型参数!!!
GAN:通过 将 样本 特征 化 以后, 告诉 模型 哪些 样本 是 黑 哪些 是 白, 模型 通过 训练 后, 理解 了 黑白 样本 的 区别, 再输入 测试 样本 时, 模型 就可以 根据 以往 ...
- 【第13届景驰-埃森哲杯广东工业大学ACM程序设计大赛-L】用来作弊的药水
链接:https://www.nowcoder.com/acm/contest/90/L来源:牛客网 输入x,a,y,b,(1<=x,a,y,b<=10^9)判断x^a是否等于y^b 前面 ...
- ArrayList、Vector、LinkedList(jdk8)
一.ArrayList分析 1.类和构造方法 public class ArrayList<E> extends AbstractList<E> //可以看到其父类是Abstr ...
- L126
Like so many things, it is not what's outside, but what is inside that counts. 许多事物都是如此,外表看起來虽不起眼,但是 ...
- Flask的请求与响应
Flask的请求与响应 1 请求相关信息 request.method # 请求方法 request.args # get 请求的参数 request.form # post请求的参数 request ...
- laravel5表单验证
学习laravel框架有一段时间了,觉得它自带的表单验证特别好用,和大家分享分享 对于一些验证规则手册上都有,相信大家看了就会,我简单的说下怎么使用自定义正则验证: 验证手机号:'tel' => ...