游戏主监控树的创建
在游戏服务器中我们需要一个主监控进程来监控,管理各个功能启动进程,所以我们在启动服务器的时候会启动主监控树
一、代码编写
会涉及到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启动游戏服务器

411

被折叠的 条评论
为什么被折叠?



