项目中有在UDP协议上提供的服务,需要对服务的性能进行测试和优化,便找了下使用erlang实现的udp的服务端和客户端。
1.udpServer.erl
-module(udpServer).
-export([start/0, client/1]).
start() ->
spawn(fun() -> server(4000) end).
server(Port) ->
{ok, Socket} = gen_udp:open(Port, [binary, {active, false}]),
io:format("server opened socket:~p~n",[Socket]),
loop(Socket).
loop(Socket) ->
inet:setopts(Socket, [{active, once}]),
receive
{udp, Socket, Host, Port, Bin} ->
io:format("server received:~p~n",[Bin]),
gen_udp:send(Socket, Host, Port, Bin),
loop(Socket)
end.
% Client code
client(N) ->
{ok, Socket} = gen_udp:open(0, [binary]),
io:format("client opened socket=~p~n",[Socket]),
ok = gen_udp:send(Socket, "localhost", 4000, N),
Value = receive
{udp, Socket, _, _, Bin} ->
io:format("client received:~p~n",[Bin])
after 2000 ->
0
end,
gen_udp:close(Socket),
Value.
2.在一个终端下启动服务器端
[root@centos-183 erlang-learn]# erl
Erlang R15B (erts-5.9) [source] [smp:2:2] [async-threads:0] [hipe] [kernel-poll:false]
Eshell V5.9 (abort with ^G)
1> c(udpServer).
{ok,udpServer}
2> udpServer:start().
<0.39.0>
server opened socket:#Port<0.2237>
server received:<<"Hello">>
3>
在服务端执行udpServer:start(). 之后在另外一个终端下启动客户端
[root@centos-183 erlang-learn]# erl
Erlang R15B (erts-5.9) [source] [smp:2:2] [async-threads:0] [hipe] [kernel-poll:false]
Eshell V5.9 (abort with ^G)
1> udpServer:client(<<"Hello">>).
client opened socket=#Port<0.608>
client received:<<"Hello">>
ok
2>
分享到:
相关推荐
4. **实时通信**:为了实现实时交互,可以使用Erlang的TCP/UDP套接字接口进行网络通信,或者利用Erlang的Websocket库,如`gun`或`websocket_client_server`。 5. **rabbitMQ灵感**:既然项目参考了rabbitMQ,那么...
Erlang是一种流行的高级编程语言,特别适合构建并发系统,例如分布式系统、电信系统等。在Erlang中,使用socket进行网络编程是非常重要的基础技能,它可以让我们创建能够处理网络通信的服务器和客户端应用。本文将...
Erlang是一种面向并发的、基于actor模型的编程语言,特别适合构建高可用性和高性能的分布式系统。在Erlang的生态系统中,esockd是一个非常重要的库,它提供了对socket编程的高级抽象,帮助开发者更高效地处理网络...
Erlang以其并发能力、容错性和轻量级进程模型而闻名,这使得它在构建分布式系统和网络应用时具有独特的优势。`ckle锁`,或Shackle,利用了这些特性,提供了一种灵活且高效的解决方案来处理TCP和UDP连接。 **Erlang...
例如,对于Java,Thrift会生成`Iface`、`Processor`、`Client`和`Server`接口及类,开发者只需实现`Iface`接口。 5. 客户端与服务器通信:客户端使用生成的客户端代码来创建服务代理,通过代理调用服务方法。服务器...
7. **Erlang**: Erlang 是一个函数式编程语言,尤其擅长构建分布式、容错和并发系统。Elixir 就是在 Erlang VM(BEAM)上运行,利用了 Erlang 的并发特性和稳定性。 8. **elixir-library**: 在这里,`elixir-...