使用Erlang实现游戏服务器-03

游戏主监控树的创建

在游戏服务器中我们需要一个主监控进程来监控,管理各个功能启动进程,所以我们在启动服务器的时候会启动主监控树

一、代码编写

会涉及到erlang的application、supervisor相关知识,需要先自己去了解一下

1.1 创建apps目录,创建server.app文件

在这里插入图片描述在这里插入图片描述

1.2 在src目录下创建server目录,创建server_app.erl和server_sup文件

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.3 主监控树编写完成 但是我们该如何启动它呢,这里我们需要现在src目录下创建server.erl文件,然后通过改写01文章中的启动脚本

在这里插入图片描述

-module(server).


%%%-------------------------------------include-------------------------------------

%%%---------------------------------------------------------------------------------

%%%------------------------------------- define ------------------------------------

%%%---------------------------------------------------------------------------------

%% API
-export([start/0, stop/0]).
-export([start_applications/1, stop_applications/1]).

%%%================================== export func ==================================
%%%---------------------------------------------------------------------------------
%% des:游戏服务器启动
%%%---------------------------------------------------------------------------------
start() ->
    %%启动主监控树
    start_applications([server]),

    io:format("erlang_game_server start").


%%%---------------------------------------------------------------------------------
%% des:游戏服务器关闭
%%%---------------------------------------------------------------------------------
stop() ->
    io:format("erlang_game_server stop").


%%%-------------------------------------------------------------------
%%% des:循环启动application
%%%-------------------------------------------------------------------
start_applications(AppList) when is_list(AppList) ->
    manage_applications(
        fun lists:foldl/3,
        fun application:start/1,
        fun application:stop/1,
        already_started,
        cannot_start_application,
        AppList
    ).

%%%-------------------------------------------------------------------
%%% des:循环停止application
%%%-------------------------------------------------------------------
stop_applications(AppList) when is_list(AppList) ->
    manage_applications(
        fun lists:foldr/3,
        fun application:stop/1,
        fun application:start/1,
        not_started,
        cannot_stop_application,
        AppList
    ).


%%%=============================local func ================================
%%%-------------------------------------------------------------------
%%% des:
%%%-------------------------------------------------------------------
manage_applications(Iterate, Do, Undo, SkipError, ErrorTag, Apps) ->
    F = fun(App, Acc) ->
        case Do(App) of
            ok ->
                [App | Acc];
            {error, {SkipError, _}} ->
                Acc;
            {error, Reason} ->
                lists:foreach(Undo, Acc),
                throw({error, {ErrorTag, App, Reason}})
        end
        end,
    Iterate(F, [], Apps),
    ok.

改写启动脚本,并增加一些启动参数设置

@ECHO OFF

:: 获取启动机子的ip地址
for /F "tokens=2 delims=:" %%i in ('ipconfig^|findstr "192.168.0\."^|findstr "IPv4"') do set mip=%%i
set ip=%mip:~1%

set cookie=game_server
set serverName=game_server
set erl="C:\Program Files\erl10.7\bin\erl.exe"
set werl="C:\Program Files\erl10.7\bin\werl.exe"
set pa= ../ebin ../apps

@REM 启动
:: +P 1024000   设置最大进程数为1024000
:: +K true      启用内核轮询,提高I/O性能
:: -smp auto    自动启用对称多处理(多核支持)
start "" %werl% ^
    +P 1024000 ^
    +K true ^
    -smp auto ^
    -pa %pa% ^
    -name %serverName%@%ip% ^
    -setcookie %cookie% ^
    -boot start_sasl ^
    -s server start
    

编译新写的代码,
在这里插入图片描述
再次点击start.bat启动游戏服务器
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值