;process01") # process01 状态仍然是 stopped,不受 process02 的影响
"stopped"
iex(13)> ProcessMonitor.stop(server) # 停止 GenServer
注 上面的代码是用 mix 创建工程来运行的,mix 的使用方法可以参见 blog:mix 构建工具
GenServer 通用抽象简介
示例代码使用了 GenServer 中的几个关键函数: init handle_call handle_case
- init: 这个函数在 GenServer.start_link 时执行,对 start_link 中的参数进行处理
- handle_call: 这个函数接受同步消息并处理
- handle_cast: 这个函数接受异步消息并处理
处理这3个常用的函数之外,GenServer 中的函数也不是很多,其他的函数,属性以及每个函数返回的值说明请参见:http://elixir-lang.org/docs/stable/elixir/GenServer.html
在上面的示例中,其实 client 也可以直接调用 GenServer 的 handle_call/handle_cast 来发送同步/异步消息, 我之所以封装了一些 api 给 client 调用,一方面,是为了简化客户端的调用(client 的 api 中参数更加简洁直观), 另一方面,将处理消息的代码和 发送消息的代码分开,便于以后扩展(因为,可能存在多个发送消息的处理都对应同一个消息处理)。
来源:http://blog.iotalabs.io/
|