英雄远征Erlang源码分析(4)-TCP连接处理

本文深入分析Erlang游戏服务器中TCP连接的处理流程,从start_tcp/0和start_client/0出发,解析sd_tcp_listener、sd_tcp_acceptor等进程的角色和工作方式,包括监听端口、异步接受客户端连接以及启动客户端进程进行通信的过程。
摘要由CSDN通过智能技术生成

上一篇文章大概捋了一下游戏服务器启动的时候对应模块的动作,现在我们来仔细研究一下其中的start_tcp/0和start_client/0部分。

在start_tcp/0中启动了sd_tcp_listener_sup监控树,并挂到sd_sup下。其后启动的进程树形关系如下:

这是游戏服务器启动后使用observer观察到的游戏内进程关系图,<0.68.0>为start_tcp/0启动的sd_tcp_listener_sup监控树,<0.70.0>为启动的sd_tcp_listener进程。跟随在sd_tcp_acceptor_sup后的十个进程为sd_tcp_acceptor进程。下面结合代码详细解释一下tcp连接的建立过程。

sd_tcp_listener:挂在sd_tcp_listener_sup监控树下的gen_server,用于监听tcp端口。看下它的初始化函数init/1:

init({AcceptorCount, Port}) ->
  process_flag(trap_exit, true),
  case gen_tcp:listen(Port, ?TCP_OPTIONS) of
    {ok, LSock} ->
      lists:foreach(fun (_) ->
        {ok, _APid} = supervisor:start_child(
          sd_tcp_acceptor_sup, [LSock])
                    end,
        lists:duplicate(AcceptorCount, dummy)),
      {ok, LSock};
    {error, 
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值