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的一些心得的更多相关文章

  1. 我的MYSQL学习心得(一) 简单语法

    我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(五) 运 ...

  2. NoSql数据库使用半年后在设计上面的一些心得

    NoSql数据库这个概念听闻许久了,也陆续看到很多公司和产品都在使用,优缺点似乎都被分析的清清楚楚.但我心里一直存有一个疑惑,它的出现究竟是为了解决什么问题? 这个疑惑非常大,为此我看了很多分析文章, ...

  3. 我的MYSQL学习心得(二) 数据类型宽度

    我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(五) 运 ...

  4. 我的MYSQL学习心得(三) 查看字段长度

    我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(五) 运 ...

  5. 我的MYSQL学习心得(四) 数据类型

    我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(五) 运 ...

  6. 我的MYSQL学习心得(五) 运算符

    我的MYSQL学习心得(五) 运算符 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据 ...

  7. 我的MYSQL学习心得(六) 函数

    我的MYSQL学习心得(六) 函数 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类 ...

  8. 我的MYSQL学习心得(七) 查询

    我的MYSQL学习心得(七) 查询 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类 ...

  9. 我的MYSQL学习心得(八) 插入 更新 删除

    我的MYSQL学习心得(八) 插入 更新 删除 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得( ...

随机推荐

  1. Hibernate的一级缓存、二级缓存和查询缓存。

    Hibernate的Session提供了一级缓存的功能,默认总是有效的,当应用程序保存持久化实体.修改持久化实体时,Session并不会立即把这种改变提交到数据库,而是缓存在当前的Session中,除 ...

  2. Codeforces Round #448 (Div. 2) B

    题目描述有点小坑,ij其实是没有先后的 并且y并不一定存在于a中 判断y的个数和所给数组无关 对于2 - 7来说 中间满足%2==0的y一共有3个 2 4 6 这样 可以看出对于每个数字a 都能够二分 ...

  3. Hibernate与JDBC、EJB、JDO的比较

    常用的数据库操作包括:JDBC.EJB.JDO以及Hibernate.它的各有优缺点: (1) JDBC:多数Java开发人员是用JDBC来和数据库进行通信,它可以通过DAO模式进行改善和提高.但这种 ...

  4. 本地测试ajax遇到的跨域问题

    浏览器console问题描述:Cross origin requests are only supported for protocol schemes: http, data, chrome, ch ...

  5. 使用SpringMVC的crud操作时,进行数据修改,但是修改成功后,页面无法显示lastName属性值(被修改的那条记录)

    我这个错误的原因在于,把map的键写错了,它必须和类名第一个字母小写相同 @ModelAttribute public void getEmployee(@RequestParam(value=&qu ...

  6. activity启动模式之singleTask

    activity启动模式之singleTask 一.简介 如果另外一个应用调用了C2,C2在栈底,如果这个程序里面再嗲用C1,C3,C2,那么这个C2就是调用onNewIntant的,C1和C3都被销 ...

  7. Java中异常的捕获顺序(多个catch)

    import java.io.IOException; public class ExceptionTryCatchTest { public void doSomething() throws IO ...

  8. RabbitMQ C# driver stops receiving messages

    http://stackoverflow.com/questions/12499174/rabbitmq-c-sharp-driver-stops-receiving-messages

  9. 014——VUE中v-if语法在网站注册中的实际应用

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  10. 【zzulioj-2115】乘积最大(区间dp)

    题目描述 今年是国际数学联盟确定的“2000——世界数学年”,又恰逢我国著名数学家华罗庚先生诞辰90周年.在华罗庚先生的家乡江苏金坛,组织了一场别开生面的数学智力竞赛的活动,你的一个好朋友XZ也有幸得 ...