`
willvvv
  • 浏览: 336883 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

erlang分布式入门(二)-UDP Server-Client

阅读更多

项目中有在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> 
 
分享到:
评论

相关推荐

    erlang 聊天室源码

    4. **实时通信**:为了实现实时交互,可以使用Erlang的TCP/UDP套接字接口进行网络通信,或者利用Erlang的Websocket库,如`gun`或`websocket_client_server`。 5. **rabbitMQ灵感**:既然项目参考了rabbitMQ,那么...

    Erlang中的socket编程简单例子

    Erlang是一种流行的高级编程语言,特别适合构建并发系统,例如分布式系统、电信系统等。在Erlang中,使用socket进行网络编程是非常重要的基础技能,它可以让我们创建能够处理网络通信的服务器和客户端应用。本文将...

    erlang高性能网络库esockd的编译和使用(三)

    Erlang是一种面向并发的、基于actor模型的编程语言,特别适合构建高可用性和高性能的分布式系统。在Erlang的生态系统中,esockd是一个非常重要的库,它提供了对socket编程的高级抽象,帮助开发者更高效地处理网络...

    ckle锁:高性能Erlang网络客户端框架

    Erlang以其并发能力、容错性和轻量级进程模型而闻名,这使得它在构建分布式系统和网络应用时具有独特的优势。`ckle锁`,或Shackle,利用了这些特性,提供了一种灵活且高效的解决方案来处理TCP和UDP连接。 **Erlang...

    thrift入门教程+代码

    例如,对于Java,Thrift会生成`Iface`、`Processor`、`Client`和`Server`接口及类,开发者只需实现`Iface`接口。 5. 客户端与服务器通信:客户端使用生成的客户端代码来创建服务代理,通过代理调用服务方法。服务器...

    riemannx:用于elixir的riemann客户端(支持TCPUDPTLS)

    7. **Erlang**: Erlang 是一个函数式编程语言,尤其擅长构建分布式、容错和并发系统。Elixir 就是在 Erlang VM(BEAM)上运行,利用了 Erlang 的并发特性和稳定性。 8. **elixir-library**: 在这里,`elixir-...

Global site tag (gtag.js) - Google Analytics