2013-11-22 67 views
2

“二郎编程软件的并行世界”并行TCP服务器说写一个并行TCP服务器这样做:写作二郎

start_parallel_server() -> 
    {ok, Listen} = gen_tcp:listen(...), 
    spawn(fun() -> par_connect(Listen) end). 

par_connect(Listen) -> 
    {ok, Socket} = gen_tcp:accept(Listen), 
    spawn(fun() -> par_connect(Listen) end), 
    loop(Socket). 

loop(...) -> %% handle request here 

start_parallel_server完成其工作,将关闭监听套接字。我们是不是应该在末尾加上timer:sleep(infinity)这样的东西?

+0

什么?为什么?哪里? –

+0

@ Hynek-Pichi-Vychodil gen_tcp将链接到调用'gen_tcp:listen'的进程。在spawn(fun() - > par_connect(Listen)结束)之后,当这个过程停止时,那么侦听套接字也将被关闭。我想我们应该在'start_parallel_server()'末尾添加'timer:sleep(infinity)',这样它就不会完成。 –

回答

4

如果您从shell运行start_parallel_server(),shell进程将拥有侦听套接字,因此只要该shell进程处于活动状态,它就会保持活动状态。请注意,shell进程在异常时死亡,并且新的shell进程重新生成......可能导致混淆。

但是,如果你产生一个新的进程,依次调用start_parallel_server()函数,您将需要在该产生的进程中进行休眠以保持活跃状态​​。

+2

是的,它是调用'gen_tcp:listen'的过程,它拥有套接字,如果它死了这个套接字,并且所有打开它的套接字都将被关闭。你可以在一个特殊的进程中调用它,或者用'gen_tcp:controlling_process/2'把它交给另一个进程。 – rvirding