一个简单的游戏服务器框架

转载 2012年03月30日 01:37:45

作者: apengjiang (1 篇文章) 日期: 三月 22, 2012 在 12:30 下午

最近一段时间不是很忙,就写了一个自己的游戏服务器框架雏形,很多地方还不够完善,但是基本上也算是能够跑起来了。我先从上层结构说起,一直到实现细节吧,想起什么就写什么。

第一部分 服务器逻辑

服务器这边简单的分为三个部分,客户端的连接首先到达网关服务器,网关这里有个线程用来监听来自与客户端的连接,然后在将这些数据发送到游戏逻辑服务器上,这个逻辑游戏服务器上,数据的交互就是通过与数据服务器进行交互。RecordServer专门用来处理与数据库的连接,查询这些事情。当然为了游戏服务器能够最大程度的不卡,肯定就得规定好网关服务器上的连接数量,免得像我们号称流畅的铁道部订票网络一样做个卡B,想想玩一局dota被卡的悲剧吧。当我们要做一个大型网游时,这三个服务器显然不够。当然在自己写的小游戏的时候就无所谓了,几个服务器全部架设在自己的破笔记本上,不就是启动几个程序而已。

这个感觉写得就差不多了,到细节吧。

第二部分 实现细节

这个就比较乱了,零零散散的,随便写了。这里很多都是对各种工具的封装,以便于自己 在项目的使用

1.make

项目这么多目录,这么多子目录,肯定得用工具去编译了,使用aclocal,automake,autoconf,make,就把我们的程序编译好了,编写自己configure.in文件,定义编译选项、链接库等等一系列乱七八糟的东西,然后对每个需要编译的子项目编写Makefile.am,有的需要要编译成库的,比如base等基类这些,其他的都编译成可执行文件了,GatewayServer,LogicalServer,RecordServer。

2.套接字封装,epoll使用

linux里,我们使用socket来读写网络上的数据,这个很简单了,gateway上一个客户端连接过来,我们就为它分配一个socket 描述符了,在网关上,一个线程用来accept,一个线程用来做数据的处理,当accept一个连接请求后,放到数据处理的线程,接受到一个数据,然后直接转发到logical server上,我们使用epoll_wait,来处理套接上的读写处理。每n ms处理一次循环,每次循环中使用一次epoll_wait,一次把这些有事件的socket取出来。

3.数据加密解密,压缩解压

对网络上的数据,为了保证安全性,必须对它们进行加密解密处理,这个简单了,网上各种内容,这里就不说了(全部写完了,有时间再写)。对数据进行压缩,能减少带宽吞吐,就是简单的调用几个zlib函数的调用,不细说,在前面转发的《zlib使用》中有讲,发现自己太懒,实在是懒得打字了。

4.线程封装,互斥量,读写锁

这些都是简单的使用RAII或其他方式,对这些东西进行一次本地封装。(应该得写一个线程池去管理这些线程,todo)

5.数据库封装

使用mysql,使用mysql的C API函数,这个必须得封装一下,不是每次数据的处理,都得去做很多事情,实现一个本地的数据的Field(列),Record(记录),Table(表),DataBase(数据库),RecordSet(查询结果集)。制作一个数据库连接句柄MysqlHandle,处理对数据库的连接,处理等,实现一个HandlerPool,,每次从Pool中取出一个句柄来对数据库进行查询,免得每次都去重新连接,什么的。

6.自己的内存池

在之前分享的文章中《内存池技术详解》《编写自己的内存分配器》,自己的《内存池应用》,已经很详细的说明了,内存池的制作,当然我在这里还是有一些改动的,但是大概思路就是这些了。

7.有一个状态机的实现

这个也在自己之前写的那个状态机相关的文章里,也做记录了。哈哈,实在是不想继续码字了,但是还是坚持下去。

8.lua与c++交互框架

这个暂时写了一半,等全部完成了,再来弄,反正就是像npc处理这些,脚本处理这些,使用tolua++。

9.tinyxml封装,正则表达式封装

tinyxml一个轻量级的xml解析器,很简单,反正是把这些现成的东西拿来自己用。正则表达式没有进入c++标准,但是还是很多现成的正则表达式的处理,直接用linux库下的regex.h,就是编译正则表达式,匹配结果这些,

10.log系统

一个项目怎么能没有自己的日志系统呢,反正就是打日志,往文件里面写东西,用std::fstream轻松搞定,定义好日志级别:error / debug / fatel / info这些

11.时间封装

这个必须有,否则自己还每次去调用get_clocktime,gmtime,time各种函数呀。

12.使用boost库里的,Noncopyable,Singleton这些设计方法,来写我们的代码

13.定义好各种信号句柄,信号发生时采用什么策略,如SIGPIPE,做忽略处理

待续。。。。。。。。(睡觉了)

游戏服务器技术应该算来已经很成熟了,相比客户端,它的技术更新速度很慢了。客户端这边,技术很多,各种游戏引擎比如3D的虚幻这些,什么粒子引擎,声音这些,页游的flash, html5,utility,,太多了,搞不过来呀。我先把服务器这边好好专专,其他的等以后再说吧。


转自:http://software.intel.com/zh-cn/blogs/2012/03/22/400010056/?cid=sw:prccsdn2203

从零开始写一个简单好用的游戏服务器引擎[0] - 前言

弄了第一个初步的版本,有兴趣的人可以来看看.还有很多不完善的地方,大家有兴趣可以一起来改改. https://github.com/sherry0319/YTSvrLib 目前我最想优化的是网络层...
  • sherry0319
  • sherry0319
  • 2016年10月08日 10:18
  • 2067

一个简单的游戏服务器框架 .

最近一段时间不是很忙,就写了一个自己的游戏服务器框架雏形,很多地方还不够完善,但是基本上也算是能够跑起来了。我先从上层结构说起,一直到实现细节吧,想起什么就写什么。           第一部分 服...
  • pbymw8iwm
  • pbymw8iwm
  • 2013年01月08日 00:28
  • 6163

一个简单的游戏服务器框架

最近一段时间不是很忙,就写了一个自己的游戏服务器框架雏形,很多地方还不够完善,但是基本上也算是能够跑起来了。我先从上层结构说起,一直到实现细节吧,想起什么就写什么。 第一部分 服务器逻辑 ...
  • madaoheng
  • madaoheng
  • 2013年12月21日 17:10
  • 468

高性能分布式游戏服务器框架

欢迎大家Fork mqant开源框架 为什么决定要重新造一个轮子? 目前网上优秀的开源游戏服务器框架也不少(当然与web框架比起来就少太多了),但总结起来都各有各的优缺点,下面列出我在选型过程中的...
  • dcba2014
  • dcba2014
  • 2017年05月21日 22:39
  • 4658

常用的开源游戏服务器框架

1 .Firefly是免费、开源、稳定、快速扩展、能 “热更新”的分布式游戏服务器端框架,采用Python编写,基于Twisted框架开发。 http://git.oschina.net/9mi...
  • qq_26240555
  • qq_26240555
  • 2015年10月08日 21:12
  • 1149

我是如何设计游戏服务器架构的

前言  现在游戏市场分为,pc端,移动端,浏览器端,而已移动端和浏览器端最为接近。都是短平快的特殊模式,不断的开服,合服,换皮。如此滚雪球! 那么在游戏服务器架构的设计方面肯定是以简单,快捷,节约...
  • qq313796269
  • qq313796269
  • 2017年07月30日 10:34
  • 1213

使用Golang开发手游服务器的感想

从最初决定使用Golang开发游戏服务器(参考这里),到服务器基本成型,经过了两个多礼拜的时间。这里记录一下感想和心得。具体Golang的使用经验将来有时间会再开篇文章来写。         两个礼...
  • langresser
  • langresser
  • 2016年01月11日 11:30
  • 8408

游戏服务器端通信框架(C++与Socket)

这是一个小型多个对战的游戏服务器端代码,经过修改。 文件一:stdafx.h //-------------------------------------------------------...
  • my2005lb
  • my2005lb
  • 2013年03月18日 22:26
  • 11532

MMORPG游戏服务器技术选型参考

游戏服务器一般追求稳定和效率,所以偏向于保守,使用的技术手段也是以已经过验证、开发人员最熟悉、能HOLD为主要前提。 1、典型按场景分服设计   开发语言: c++   数据库:mysql   架构:...
  • yuanfengyun
  • yuanfengyun
  • 2016年01月16日 14:01
  • 8671

【开源】golang高性能分布式游戏服务器框架-mqant

2016年底的时候对即时通讯以及游戏开发产生了一些兴趣,而且自己这方面的知识掌握也非常少,在未来很多产品应该都会使用到长连接技术(物联网IOT),因此很有必要掌握这方面的技术。于是就在网络上查询相关的...
  • o1587790525
  • o1587790525
  • 2017年02月27日 18:10
  • 8508
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:一个简单的游戏服务器框架
举报原因:
原因补充:

(最多只允许输入30个字)