游戏服务器之网关

本文详细介绍了游戏服务器中网关的角色和功能,包括过滤、转发、广播消息,以及处理登录服务器和其他服务器的消息。内容涵盖网关初始化、处理登录服务器消息、处理共享消息以及中心服务器消息的流程。
摘要由CSDN通过智能技术生成

多进程的游戏服务器的应用场景下:

网关的功能:

过滤消息、转发消息、广播消息、消息校验和踢除非法消息的玩家(加速和发假消息)

角色校验

创建、删除、查询角色

网关连接:

网关会主动连接所有的场景服务器、中心服务器、数据服务器、社会服务器。



本文内容:

1、网关的初始化

2、网关的处理登录服务器的消息

3、处理其他服务器转发来的共享消息(场景等服务器发来的)

4、处理中心服务器发来的消息


1、网关的初始化

(1)网关的连接池(主动、被动)初始化。连接线程连接中心服务器。绑定网关端口。启动逻辑线程。初始化网关屏索引。

主动连接线程池主动连接所有场景服务器、社会服务器、数据服务器。

在中心服务器连接验证成功后,网关会通知网关的服务器id、ip地址、端口、网络类型到登录服务器。网关以后每次增加网关连接管理器的连接数,会通知连接数到登录服务器。

bool gateway_server::init()

{
//指令检测开关
verify_client_version = atoi(TITAN_VERSION);
g_log->info("服务器版本号:%d",verify_client_version);

taskPool = new tcp_session_pool(2048, 65000);
if (NULL == taskPool
|| !taskPool->init())
return false;

clientPool = new tcp_client_pool(g_xml_config.get_integer("Global.Gateway.LinkServerNumber"),8000);
if (NULL == clientPool
|| !clientPool->init())
return false;

strncpy(pstrIP, tcp_socket::getIPByIfName(g_xml_config.get_string("Global.NetCard.Config")), MAX_IP_LENGTH - 1);
 
if (!sub_server::init())
{
return false;
}
const ServerEntry *serverEntry = NULL;
//g_log->debug(__PRETTY_FUNCTION__);


//连接Social服务器(社会关系服务器)
serverEntry = getServerEntryByType(SOCIALSERVER);
if (NULL == serverEntry)
{
g_log->error("不能找到Social服务器相关信息,不能连接Social服务器");
return false;
}
socialClient =  new social_client("Social", serverEntry->pstrExtIP, serverEntry->wdExtPort,serverEntry->ServerID);
if(! socialClient || !clientPool->put(socialClient))
{
g_log->error("连接Social服务器失败 %s", __PRETTY_FUNCTION__);
return false;
}

//连接所有的档案服务器(数据库服务器)
serverEntry = getServerEntryByType(DBSERVER);
if (NULL == serverEntry)
{
g_log->error("不能找到Record服务器相关信息,不能连接Record服务器");
return false;
}
dbClient = new db_client("Record", serverEntry->pstrExtIP, serverEntry->wdExtPort,serverEntry->ServerID);
if(!dbClient || !clientPool->put(dbClient))
{
g_log->error("没有足够内存,不能建立Record服务器客户端实例");
return false;
}

//连接所有的场景服务器
serverEntry = getServerEntryByType
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值