站内搜索

搜索

手游源码-游戏源码-棋牌源码资源网-亲测源码-游戏搭建-破解游戏-网站源码-qq技术

100金币/天 购买

游戏服务器开发有哪些东西要考虑和页游开发接触并不多

16

主题

232

帖子

248

金币

绿钻会员

Rank: 3Rank: 3

积分
596
发表于 2022-4-5 17:58:17 | 显示全部楼层 |阅读模式
我从事游戏服务器开发已经快两年了。在过去的两年中,我参与了许多项目。学习了很多游戏服务器开发技术。我参与过几款不同架构的服务器的开发,所以我只讲一下游戏服务器开发所需要的技术。(下文所指的游戏服务器更偏向手游,因为我对端游和网页游戏的开发接触不多)

一.让我们谈谈服务器开发要考虑的事情。

1.开发语言的选择:

要想把工作做好,首先要磨砺自己的工具。选择合适的开发语法会对后期的开发产生事半功倍的效果。

主要产业是c/c++++/lua模式作为游戏服务器。c/c++用于网络通信数据传输,/lua用于业务逻辑。这样既保持了网络传输的效率(c++),又提高了开发效率(/lua),还支持热更新。

当然,还有其他的服务器开发语言,(没用过,但是很多网页游戏公司都用)手游服务器,c#(大棒国喜欢用,神奇的民族),Java(当时我都愣住了)第一次听说)天外神坛,节点。js(对于少数游戏,还有node.js写的引擎),php(php+MySQL也是http协议通信的游戏不错的选择)手游服务器,...

看了两个游戏服务器引擎

1.(9秒俱乐部开发的游戏服务器框架)



2.(作者说是按照架构设计的,c++)

2.数据库

有两种流行的数据库,关系数据库mysql和非关系数据库。这是我使用最多的两个数据库。

网上有很多关于两者的比较。当然,您也可以使用其他数据库。至于sql,不怕被骗就可以用(我一直对微软的东西印象不好)。

3.服务器架构

先说一下我用过的架构模型之一,也是公司根据架构设计的:

1.Gate:首先要有一个Gate(网关)服务器,负责客户端连接和消息转发到Game(游戏服务器),保持客户端和服务器之间的连接

没有逻辑,只有消息的加解密,以及客户端和服务端消息的转发(相当于两者之间的一座桥梁)。



2.:是一个提供游戏逻辑功能的游戏进程(使用单进程(或单线程)模型,游戏服务器的瓶颈从来都不是CPU,所以单线程只做逻辑功能就够了,这里不需要使用更多线程或多进程)。

3.:实现数据库的读写,方便游戏服务器异步读写数据库的数据(有的在游戏服务器上读写数据库,没有单独的服务器,我恐怕游戏服务器的单个进程还不够)。

4.:负责管理所有,在之间转发消息,并提供向所有游戏转播的功能。

4.协议

客户端和服务器之间的协议通信可以是tcp或http。这主要取决于游戏模型。如果是单人网络弱的游戏,使用http就足够了。就像每天酷跑一样,它只在需要时处理一个http请求响应。

不过tcp还是用的比较多。现在大部分网络游戏都是tcp,和游戏一样。我们现在的游戏使用http和tcp,客户端和游戏服务器使用http协议。tcp长链接只在多人对战转战服时使用。

udp:其实游戏里都有udp。在pvp实时战斗等一些高效率的场景下,tcp拥塞控制和超时重传不适合。性为部分游戏的效率。

目前参与开发的游戏都使用http协议和tcp协议。在游戏服务器中,单人游戏使用http协议。战斗服务器需要长连接来保存协议状态,使用tcp。



5.保存到磁盘

如果有数据库,就必须有数据库读写操作。最重要的是保存(save)、定期保存或即时保存。

即时保存是每次执行操作时将数据保存到数据库中。当然,这会导致对数据库的操作过于频繁。毕竟,这是效率的瓶颈之一。

周期性归档也叫固定归档,就是每隔固定时间归档一次,比如10秒或者15秒,这样对数据库的压力就会小很多。导致回滚。

二.开源技术开发游戏服务器

1.、boost.asio等网络库,网上有很多开源的网络库。与其造轮子,不如使用开源网络库作为自己服务器的通信库。最著名的是和 boost.asio。

Boost的ASIO是一个异步IO库,封装了pair上的常用操作,简化了基于程序的开发。跨平台支持。

它是一个用C语言编写的事件驱动的开源网络库,见:

至于两者之间的效率,仁者见仁。

当然还有很多:比如云峰的(c+lua),陈硕的木多(c++)。都写的很好,云枫写的简单好用,陈硕在炫耀自己的C++功底。

2.:全称是为网络通信过程中的数据存储和协议编解码而开发的工具库。它类似于XML或JSON,即以某种格式(XML、JSON)保存某种数据结构的信息,

与 XML 和 JSON 不同,它是基于二进制的。主要用于数据存储、传输协议格式等场合。有关详细信息,请参阅:

它的优点是为传输比较大的数据而产生的数据非常紧凑和小,可以显着减少传输量。

并且处理速度比较快,有多种编程语言,如C++、Java、PHP等。

缺点是不能明文编辑(数据是二进制的)。

用rpc进行数据传输非常方便,是个不错的选择。它只负责消息的打包和解包,不包括RPC的实现,所以需要自己实现。



3.:消息队列,健壮简洁的多进程通信方案的基础。它不是正确的封装,不能用于实现现有的网络协议。它有自己的模式,不同于更底层的点对点通信模式。它具有比 tcp 协议更高级别的协议。(不一定基于TCP协议,当然也可以用于进程间和进程内通信。)它改变了通信是基于一对一连接的假设。

这里更适合服务器到服务器的通信,比如逻辑套装和战斗套装之间的通信。

4.:用于动态 Web 应用程序以减少数据库负载的高性能分布式内存对象缓存系统。它通过在内存中缓存数据和对象来减少数据库读取次数,从而提高动态、数据库驱动的网站的速度。

它可以用于缓存。比如客户端每次操作都需要操作数据库,会严重影响效率。在这种情况下,在中间增加一层缓存系统可以提高性能。基于http协议的通信是一个不错的选择。如果是长tcp链接,直接维护一个在线内存对象就够了。

类似的技术还有redis等。

5.glog/zlog:你肯定需要记录日志并注意你的爱好。

6.:内存性能分析

7.:分布式编译工具。以前,每次修改代码都需要半个小时的时间。使用多台计算机同时为您编译它要快得多。
【天外神坛】免责声明及帮助
1.重要:如果遇到隐藏内容回复后显示为代码状态,直接刷新一下页面即可解决此问题。
2.本文部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责。
3.若您需要商业运营或用于其他商业活动,请您购买正版授权并合法使用。
4.如果本站有侵犯、不妥之处的资源,请在网站右边客服联系我们。将会第一时间解决!
5.本站所有内容均由互联网收集整理、网友上传,仅供大家参考、学习,不存在任何商业目的与商业用途。
6.本站提供的所有资源仅供参考学习使用,版权归原著所有,禁止下载本站资源参与商业和非法行为,请在24小时之内自行删除!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

老群被封加此新群不迷路。
上个主题 下个主题 快速回复 返回列表 客服中心 搜索 QQ加群
上个主题 下个主题 快速回复 返回列表 客服中心 搜索 QQ加群

QQ|Archiver|小黑屋|天外神坛

湘ICP备2021015333号

Powered by 天外神坛 X3.4 © 2020-2022 天外神坛