Erlang进阶(四) Erlang 内置 gen_tcp|gen_udp 可以作为 tcp|udp 网络监听模块, 这里主要讲解的是 gen_tcp 模块, udp 方面相对来说接触的比较少.
% 网络请求入口 net_main() -> ListenPort = 6000, % 访问端口 ListenOpts = [ binary, % 二进制流 % 如果为 true 为主动模式, 所有接收数据都转发到声明监听的进程当中, 默认为主动模式 % 如果为 false 为被动模式, 接收到消息之后需要手动调用 gen_tcp:recv 读取信息 % 适合定制化 acceptor 处理, 一般游戏服务器都需要构建管理自己连接池, 所以该配置会关掉 {active, false}, % 系统级别帮你保证客户端和服务端的连接活跃性, 默认是关闭的 % 游戏服务一般都是自己做心跳维护的, 所以不需要系统做连接保活 {keepalive, false}, % 数据包直接推送给客户端而不会等待凑足待发送队列一次性推送 % 一般非高频网络服务会写入待发送队列之后一次性推送来提高效率, 游戏服务之类不需要 {nodelay, true}, % Erlang 会保证将TCP数据原封不动推送回客户端 {packet, 0}, % 允许对本地端口进行复用 {reuseaddr, true}, % 设置是否做待发送队列一次性推送, 同上, 游戏服务之类不需要 {delay_send, false}, % 缓冲待处理队列长度, 也就是数据连接之后消息队列长度 {backlog, 5120}, % Socket 被关闭之后数据是否还能将缓冲区数据推送, 游戏服务最好关闭连接之后一起推送 {exit_on_close, true}, % 系统发送数据的超时时间, 超过指定时间会返回 {error, timeout} {send_timeout, 12800} ], ok.