Erlang gen_server 简单使用

发布于 2023-07-15 18:05:07 字数 983 浏览 46 评论 0

-module(tcp_server).

-behaviour(gen_server).

-export([start_link/0, init/1, handle_call/3, handle_cast/2]).

start_link() -> 
    gen_server:start_link(?MODULE, ok, []).

init(ok) ->
    io:format("tcp_server init...\n"),
    {ok, []}.

handle_call(Command, _From, State) ->
    case Command of 
        {add, List} ->
            {reply, List, [List | State]};
        {get} -> 
            {reply, State, State} 
    end.

handle_cast(get, State) -> 
    {noreply, State}.

behaviour gen_server 相当于继承了 gen_server 接口,必须实现 init,handle_call/3, handle_cast/2 函数,handle_call 是实现同步调用,handle_cast 是实现异步调用,无需等待。

使用 rebar3 shell 调用:

{ok, Pid} = tcp_server:start_link().
tcp_server init...
{ok,<0.144.0>}
2> gen_server:call(Pid, {get}).
[]
3> gen_server:call(Pid, {add, [2,4,5]}).
[2,4,5]
4> gen_server:call(Pid, {add, [6,7,8]}).
[6,7,8]
5> gen_server:call(Pid, {get}).         
[[6,7,8],[2,4,5]]

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

聽兲甴掵

暂无简介

文章
评论
26 人气
更多

推荐作者

櫻之舞

文章 0 评论 0

弥枳

文章 0 评论 0

m2429

文章 0 评论 0

野却迷人

文章 0 评论 0

我怀念的。

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文