最近看到百度空间的一个帖子,不错,在这里整理下,转载至我的博客里,开始自己慢慢琢磨写一个框架。

我先从上层结构说起,一直到实现细节吧,想起什么就写什么。

第一部分 服务器逻辑
服务器这边简单的分为三个部分,客户端的连接首先到达网关服务器,网关这里有个线程用来监听来自与客户端的连接,然后在将这些数据发送到游戏逻辑服务器上,这个逻辑游戏服务器上,数据的交互就是通过与数据服务器进行交互。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,,太多了,搞不过来呀。我先把服务器这边好好专专,其他的等以后再说吧。

一个简单的游戏服务器框架相关推荐

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

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

  2. 做一个简单的游戏服务器

    为什么其实不重要! 做一个简单网游服务器. 服务由两部分构成,网关和世界服务器,绞尽脑汁,还没有想到一个好听的名字,可以肯定的是要code n行,就暂定CodeN {N >= 0}. 语言选用C ...

  3. node-php-server 游戏服务器框架

    做游戏服务器8年多了,用过lua, 用过C++, 用过nodejs ,最近用的是php,有些人会说php不是用在web开发吗,怎么能用在游戏服务器的业务逻辑开发,php 怎么跟客户端通信,肯定有很多人 ...

  4. 简单的golang游戏服务器框架《railgun》的文档目录索引

    使用golang写的框架.使用的是require response的状态同步 使用了第三方protobuf库作为报文和序列化,关于如何在windows下安装参考:windows下安装golang pr ...

  5. 一个简单的游戏框架:配置表方案

    一个简单的游戏框架:配置表方案 代码:https://github.com/HushengStudent/myGameFramework 1.配置表格式 csv,逗号分隔,可以使用wps和Excel打 ...

  6. python游戏服务器框架_mqant首页、文档和下载 - Golang/python语言开发的分布式游戏服务器框架 - OSCHINA - 中文开源技术交流社区...

    mqant mqant 是一款基于 Golang 语言的简洁,高效,高性能的分布式游戏服务器框架,研发的初衷是要实现一款能支持高并发,高性能,高实时性的游戏服务器框架,也希望 mqant 未来能够做即 ...

  7. 教你从头写游戏服务器框架

    本文由云+社区发表 作者:韩伟 前言 大概已经有差不多一年没写技术文章了,原因是今年投入了一些具体游戏项目的开发.这些新的游戏项目,比较接近独立游戏的开发方式.我觉得公司的"祖传" ...

  8. golang游戏服务器框架_教你从头写游戏服务器框架

    需求 由于"越通用的代码,就是越没用的代码",所以在设计之初,我就认为应该使用分层的模式来构建整个系统.按照游戏服务器的一般需求划分,最基本的可以分为两层: 底层基础功能:包括通信 ...

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

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

最新文章

  1. 港中文周博磊:十年之间的CVPR与我们(附CVPR2020部分论文链接/开源代码/解读)...
  2. ASP.NET MVC Framework体验(2):显示列表数据
  3. mysql当数据改变时_当数据库里面的价格变化时,发送信息到企业微信中
  4. leetcode算法题--解码方法★
  5. 什么是云计算基础设施?
  6. asoc linux设备驱动_Linux驱动分析之I2C设备
  7. hdf5 matlab,通过MATLAB将矩阵数据写入HDF5文件中的每个数据类型成员
  8. 淘宝直播连续3年增速150%以上 一年喊了2.27亿句“宝宝”
  9. python基础教程是什么-Python基础教程(一)
  10. Eclipse/NSight: methond could not resolved
  11. 2013=726 整合,优化,利用自身资源。 让自己的时间更有意义,最大化利用
  12. 3dsmax注册机不能用管理员身份运行的解决办法
  13. 【hashcat help中文注释】
  14. 2015 2020 r4烧录卡 区别_2020版药典,药用辅料被重视了!
  15. HTML 编辑器简介
  16. cass坡度土方计算案例_南方cass几种土石方计算方法分析.doc
  17. 每次离开总是 装做轻松的样子 微笑着说回去吧 转身泪湿眼底
  18. Sublime安装中文插件
  19. “五一”或成疫情来最火爆假期,招行信用卡天天返利助力消费
  20. App推广活动方案策划步骤

热门文章

  1. Asterisk拨号方案语法基础
  2. python十条建议_十条建议帮你提高Python编程效率
  3. android 解析错误 真机,AndroidStudio使用真机调试时出的一些bug
  4. python内置函数分类_Python 69个内置函数分类总结
  5. Linux绘图函数与驱动,Linux中与驱动相关的ioctl函数
  6. html怎么导入js编辑,three.js怎么导入html
  7. python主线程执行_在Django vi中的主线程中执行Python函数
  8. 连接网络后浏览器却上不了网
  9. 【转】深度理解C# 的执行原理
  10. 【转】setsocketopt getsocketopt比较全的参数说明