Erlang 创建一个并行(支持多个socket)连接的TCP服务器

版权声明:@潘广宇博客, https://blog.csdn.net/panguangyuu/article/details/89212678

创建一个简单的顺序连接的TCP服务器:https://blog.csdn.net/panguangyuu/article/details/89211209

一、修改 tcpServer.erl

-module(tcpServer).
-export([start/0]).

start() -> 
    {ok, Listen} = gen_tcp:listen(2345, [binary, {packet, 4}, {reuseaddr, true}, {active, true}]),
    spawn(fun() -> acceptRequest(Listen) end).

acceptRequest(Listen) ->
    {ok, Socket} = gen_tcp:accept(Listen),       % accpet每收到一个连接时,就创建一个进程进行处理
    Process = spawn(fun() -> acceptRequest(Listen) end),
    loop(Socket, Process).

loop(Socket, Process) ->
    io:format("Process ~p~n", [Process]),
    receive 
        {tcp, Socket, Bin} ->
            Receive = binary_to_list(Bin), 
            io:format("Server received Content = ~p~n", [Receive]),
            Content = Receive ++ " Hello", 
            gen_tcp:send(Socket, Content),
            loop(Socket, Process);
        {tcp_closed, Socket} ->
            io:format("Server socket closed~n")
    end.

二、通过spawn处理多个请求的过程

主进程A在监听端口后,首先分裂一个新进程B,进程B等待请求的到来,当第一个请求到来时,又分裂一个新进程C去等待监听第二个请求,而B进程接着处理第一个请求。

猜你喜欢

转载自blog.csdn.net/panguangyuu/article/details/89212678