Mangos服务器框架设计分析(一)

本文介绍了Mangos服务器框架的设计,这是一个基于ACE库的1:n模式架构。Mangos分为登陆服务器和游戏逻辑服务器,大厅服务器采用单线程处理登陆请求,验证并发送游戏区信息。文章详细讲解了大厅服务器的Acceptor和AuthSocket,以及数据库的使用,特别是登陆数据库的作用。
摘要由CSDN通过智能技术生成

距离上次写博客已经大半年了,这大半年中经历了很多的人和事,并且也收获了很多,所在的项目组游戏已经成功上线运营了,在此稍微花点时间记录一下这大半年在业余时间做的一些技术积累吧,在此就以堪称是“大魔兽私服”服务器框架——Mangos来做些框架设计上的分享吧,Mangos整体看来还是1:n模式的架构,底层的采用了多线程的IO,而游戏的主逻辑依旧是单线程的,Mangos服务器框架主要是基于ACE开源库的,很早之前就有接触过ACE,但是没有做个比较大的项目,正好借此机会来加深一下如何用ACE来架设服务器框架的能力,好了,下面简要的介绍一下Mangos的架构吧:在Mangos中,主要分为了两类服务器,一类服务器就是我们常说的登陆服务器,也叫大厅服务器,而第二类服务器就是我们常说的游戏逻辑服务器,下面我们就从大厅服务器说起吧,Mangos大厅服务器设计的其实很简单,采用的是单线程的方式,主要是负责接收登陆请求,验证请求以及针对验证通过的请求发送游戏逻辑服务器的地址(游戏区的信息),接下去来看看,大厅服务器的简要代码吧:

1.大厅服务器主流程:

extern int main(int argc,char** argv)
{
	char const* cfg_file = "readmd.conf";
	char const* options = ":c:s";
	ACE_Get_Opt cmd_opts(argc,argv,options);
	cmd_opts.long_option("version",'v');

	char serviceDaemonMode = '\0';

	int option;
	while((option =cmd_opts())!=EOF)
	{
		switch (option)
		{
		case 'c':
			cfg_file = cmd_opts.opt_arg();
			break;
		case 'p':
			printf("loginServer config\n");
			return 0;
		case 's':
			{
				const char* mode = cmd_opts.opt_arg();
				if(!strcmp(mode,"run"))
					serviceDaemonMode = 'r';
#ifdef WIN32
				else if(!strcmp(mode,"install"))
					serviceDaemonMode = 'i';
				else if(!strcmp(mode,"uninstall"))
					serviceDaemonMode = 'u';
#else
#endif
				else
				{
					printf("Runtime-Error: -%c unsupported argument %s",cmd_opts.opt_opt(),mode);
					return 1;
				}
				break;
			}

		default:
			break;
		}
	}

#ifdef WIN32
	switch (serviceDaemonMode)
	{
	case 'i':
		WinServiceInstall();
		return 1;
	case 'u':
		WinServiceUnInstall();
		return 1;
	case 'r':
		WinServiceRun();
		break;
	default:
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值