最近一段时间不是很忙,就写了一个自己的游戏服务器框架雏形,很多地方还不够完善,但是基本上也算是能够跑起来了。我先从上层结构说起,一直到实现细节吧,想起什么就写什么。
第一部分 服务器逻辑
服务器结构图见附件
服务器这边简单的分为三个部分,客户端的连接首先到达网关服务器,网关这里有个线程用来监听来自与客户端的连接,然后在将这些数据发送到游戏逻辑服务器上,这个逻辑游戏服务器上,数据的交互就是通过与数据服务器进行交互。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,,太多了,搞不过来呀。我先把服务器这边好好专专,其他的等以后再说吧。
- 大小: 9 KB
分享到:
相关推荐
C++游戏服务器框架基于Socket的设计是游戏开发中的一个重要环节,它负责处理客户端的连接、通信以及数据包的解析与处理。Socket是网络编程的基础,它提供了进程间通过网络进行通信的能力。下面将详细阐述C++游戏...
java游戏服务器框架.zipjava游戏服务器框架.zipjava游戏服务器框架.zip java游戏服务器框架.zipjava游戏服务器框架.zipjava游戏服务器框架.zip java游戏服务器框架.zipjava游戏服务器框架.zipjava游戏服务器框架.zip...
《Lua游戏服务器框架开源源码——crossover深度解析》 Lua,这门轻量级的脚本语言,因其简洁高效、易于嵌入的特点,在游戏开发领域尤其是服务器端得到了广泛应用。crossover,作为一款基于Lua的游戏服务器框架,为...
总结,《Go-go高性能游戏服务器框架》是结合Go语言特性打造的一款专业级游戏服务器解决方案,它通过分布式系统、高效网络通信和强大的状态管理,为开发者提供了一个高效、稳定的开发环境,助力实现高质量的网络游戏...
Firefly是免费、开源、稳定、快速扩展、能 “热更新”的分布式游戏服务器端框架,采用Python编写,基于Twisted框架开发。它包括了开发框架和数据库缓存服务等各种游戏服务器基础服务,节省大量游戏开发的工作时间,...
Leaf Server是基于Go语言开发的游戏服务器框架,其设计目标是为游戏开发者提供一个稳定、高效、易用的后端解决方案。框架集成了常见的游戏服务器功能,如网络通信、游戏逻辑处理、数据持久化等,并且支持多种数据库...
在本文中,我们将深入探讨一个基于Lua的分布式游戏服务器引擎框架,该框架以其轻量级、简单易用、高稳定性和强扩展性为特点,并支持热更新。 首先,让我们理解“基于Lua”的含义。Lua是一种轻量级的脚本语言,因其...
游戏服务器框架是构建在线游戏后端的核心组成部分,它负责处理玩家的交互、游戏逻辑、网络通信、资源管理等任务。本框架设计的目标是提供高效、稳定且可扩展的游戏服务环境,便于开发者快速实现游戏功能并优化性能。...
在游戏服务器框架设计中,通常会包含以下几个关键模块: 1. **网络通信**:游戏服务器需要与客户端进行频繁的数据交换,因此高效的网络通信模块至关重要。Java的NIO(Non-blocking Input/Output)库可以提供异步I/O...
ET开源游戏服务器框架是基于C#语言开发的一款高效、易用的游戏服务器框架,它专为构建高性能、高并发的游戏服务而设计。这个框架利用了C#的特性,结合了现代软件开发的最佳实践,以提供稳定、可靠的服务。下面将详细...
3. DB不参与负载均衡,考虑是棋牌数据库负载不高,即使需要扩展多个也可以通过不同服务器配置指向不同的DB来扩展 4. 消息头格式以源码实现的为主 5. 心跳机制在不考虑客户端的前提下,服务端会主动发送心跳包,但...
支持单台游戏服务器一到两千人同时在线. 包含: 1.游戏基础框架 2.网关,路由通信模块 3.游戏机器人框架 4.大厅,房间,桌子流程 5.完善的统一棋牌控制库存框架,支持游戏单控 6.支持后台通过websocket动态修改游戏参数 ...
总之,基于Node.js的游戏服务器框架提供了一个强大的开发平台,结合开源、跨平台和高性能的特点,让开发者能够高效地构建和维护游戏服务。在实际应用中,开发者需要根据项目需求选择合适的数据库、通信协议,并充分...
在这个特定的项目中,一个基于Java的开源游戏服务器框架被实现,利用了几个关键的技术栈,包括Netty、ProtoBuf和Disruptor。这些技术都是为了优化性能、提高效率和简化通信而设计的。 Netty是一个高性能、异步事件...
综上所述,Plug高性能的分布式游戏服务器框架为游戏开发者提供了一个强大且灵活的工具,帮助他们构建出性能卓越、稳定性高的网络游戏。其设计理念和技术特性,无疑将推动游戏行业的技术进步,为玩家带来更优质的游戏...
网易同事 周永昶 基于node.js的高可扩展游戏服务器框架 设计与实现 Node.js与游戏服务器; 游戏服务器框架的可扩展性和设计,以及pomelo的框架
通常,一个游戏服务器框架由以下几个主要部分组成:网络通信模块、游戏逻辑处理模块、数据库交互模块以及状态管理模块。网络通信模块负责处理客户端的连接请求,实现数据的发送和接收;游戏逻辑处理模块则是游戏的...
在本案例中,我们讨论的是一个基于Java语言实现的游戏服务器框架。Java因其跨平台性、稳定性和强大的库支持,成为了开发游戏服务器的热门选择。 首先,让我们了解Java在游戏服务器开发中的优势。Java提供了丰富的...
本篇文章将深入探讨一个使用Java语言实现的网络游戏服务器框架,旨在为学习者提供一个实践与理论结合的参考。 一、Java在游戏开发中的应用 Java以其跨平台的特性、丰富的库支持和优秀的性能,成为开发网络游戏...
Go-gaserver项目,作为一个基于Protoactor框架的游戏服务器,正是为满足这些需求而设计的。本文将深入探讨Go-gaserver的核心特性、Protoactor框架及其在游戏开发中的应用。 首先,让我们了解Protoactor。Protoactor...