2-esockd例子echo
2.1 例子代码
这个例子比较简单在README.md文件中即可找到
接下来先试用rebar3 来生成新项目
关于rebar3使用文档如下所示:
rebar3
生成新项目:
rebar3 new echo
然后在项目的app.src文件中引入 esockd 应用
然后打开src目录
首先创建echo_server模块如下所示:
-module(echo_server).
-export([start_link/2, init/2]).
start_link(Transport, Sock) ->
{ok, spawn_link(?MODULE, init, [Transport, Sock])}.
init(Transport, Sock) ->
case Transport:wait(Sock) of
{ok, NewSock} ->
loop(Transport, NewSock);
Error -> Error
end.
loop(Transport, Sock) ->
case Transport:recv(Sock, 0) of
{ok, Data} ->
{ok, Peername} = Transport:peername(Sock),
Transport:send(Sock, Data),
loop(Transport, Sock);
{error, Reason} ->
io:format("TCP Error: ~s~n", [Reason]),
{stop, Reason}
end.
然后新建一个listener具体代码如下:
-module(kc_listener).
-author("mac").
%% API
-export([start/0]).
%% @doc Start all listeners.
-spec start() -> ok.
start() ->
do_start_listener(),
ok.
do_start_listener() ->
esockd:open(kc_connection, 5000, [{tcp_options, [binary, {reuseaddr, true}]}],
{kc_connection, start_link, []}).
最后在主应用里面调用
kc_listener:start()
然后执行rebar3 release 来打包
找到编译后的二进制问加你执行echo console进入控制台,接下来就可以执行telent命令来访问了
如下所示:
mac@MacdeMacBook-Pro keep_connection % telnet 127.0.0.1 5000
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
hello
hello
关于源码
erlang2, escoked源码2