游戏服务器之中心服务器

本文详细介绍了游戏服务器中的中心服务器设计,包括初始化、其他服务器启动验证、消息转发和登录控制。中心服务器作为枢纽,管理服务器连接,控制启动流程,转发系统及逻辑消息,并处理登录过程中的各种情况。
摘要由CSDN通过智能技术生成

中心服务器是连接其他服务器并控制其他服务器的中心枢纽。


设计上:

(1)控制消息转发流程

(1-1)中心服务器的全局连接管理器管理其他服务器连接到中心服务器的连接 (g_center_session_manager)。

(1-2)登录连接管理器管理连接到登录服务器的会话。

(1-3)gm连接管理器管理连接到gm服务器的会话。

(2)其他服务器启动控制

根据服务器表来控制其他服务器启动依赖关系。动态服务器需要等待静态服务器启动了才能启动。

(3)登录流程控制

(3-1)登录临时会话管理器管理临时登陆会话。

  (3-2)加入登录临时会话到登录管理器。如果已有该登录会话(表示同一连接正在登录中),并且中心角色在线,那么发送强行存档到网关。

(3-3)登录成功就添加账号到中心服务器(适用于账号与角色一一对应的情况)。如果该玩家已登录就注销该玩家。已经登陆但找不到用户就移除该账号。成功登录,就发送消息到网关。 


1、中心服务器初始化

初始化mysql句柄池,从数据库获取中心服务器配置,初始化网络被动连接线程池,初始化网络主动连接线程池,主动连接到登录服务器(和gm服务器),
绑定服务器端口(初始化监听socket,设置收发缓冲区大小(窗口大小128k),并把监听socket注册到epoll描述符里)


bool center_server::init()
{
mysqlPool = new mysql_handle_pool();
if (NULL == mysqlPool
|| !mysqlPool->putUrl(0, g_xml_config.get_string("Global.MYSQL.Config")))
{
g_log->error("连接数据库失败");
return false;
}

strncpy(pstrIP, tcp_socket::getIPByIfName(g_xml_config.get_string("Global.NetCard.Config")), MAX_IP_LENGTH - 1);

if (!getServerInfo())//从数据库或配置文件获取中心服务器的配置
return false;

//初始化连接线程池(网络被动连接线程池)
taskPool = new tcp_session_pool(g_xml_config.get_integer("Global.ThreadCarryLink.Config"));
if (NULL == taskPool || !taskPool->init())
return false;

//初始化客户端连接池(网络主动连接线程池)
clientPool = new tcp_client_pool(8,50000);
if (NULL == clientPool || !clientPool->init())
return false;
    if(!login_client::init(clientPool))//主动连接到登录服务器
{
g_log->error("初始化登陆服务器模块...失败");
return false;
}

#ifdef GMSERVER
    if(!gm_client::init(clientPool))//主动连接到gm服务器
  {
  g_log->error("初始化登陆服务器模块...失败");
  return false;
  }
#endif

g_log->info("初始化登陆服务器模块...成功");
if( !g_main_logic_thread.start())
{
g_log->error("初始化main_logic_thread模块...失败");
return false;
}
g_log->info("初始化main_logic_thread模块...成功");


if (!server_base::bind_socket(wdPort))//绑定服务器端口(初始化监听socket,设置收发缓冲区大小(窗口大小128k),并把监听socket注册到epoll描述符里)
{
return false;
}

return true;
}


2、其他类型服务器的启动验证

(1)检查服务器依赖 

检查服务器依赖,如果其他被依赖的服务器都启动了就可以通知该服务器来启动

除了中心服务器、登录服务器、运营服务器,其他服务器需要等待静态服务器的启动之后才能启动。

服务器之间

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值