重点:Socket有归属权,只有创建的进程才有资格处理,除非使用gen_tcp:controlling_process(Socket,Pid).,把该Socket的控制权交给Pid进程。
游戏中主要使用阻塞模式{active, fasle}
1、主动型消息接收(非阻塞):{active,true}
如果客户端发送的数据过快服务器可以处理的速度,那么系统就会被消息淹没,不会阻塞客户端,也叫异步服务器。
start()- >
{
ok,Listen}=gen_tcp:listen(Port,[...,{active,true}...]),
{ok,Socket}=gen_tcp:accept(Listen),
loop(Socket).
loop(Socket)->
receive
{tcp,Socket,Data}->
... do something with the data ...
{tcp_closed,Socket}->
...
end.
也叫异步服务器,不会阻塞客户端
2、被动型消息接收(阻塞):{active,false}
不会因为一个过于活跃的客户机通过发送大量数据的攻击而崩溃。
调用gen_tcp:rec