游戏的多线程服务器怎么如何设计

游戏的多线程服务器怎么如何设计,第1张

游戏服务器多线程是有处理器决定的,一般来说线程越多性能也就越好,当然成本也就越高,你可以参考这款28线程(单CPU)的图形工作站(用于设计)

产品型号:ZI2TW6-129913DP

产品类型:双路十二核工作站

处 理 器:Xeon E5-2687W

V4×2

内存:128G DDR4 REG ECC

硬盘:SSD PCIe 2.0T

不知道还有多少服务端,只能说那些开花者太能干了

LavaBukkit是适用于1.12.2的Forge模组和Spigot模组的minecraft服务器实现,剩下的一堆优化。

原始阶段不建议使用。

与上文一模一样……除了是稳定版本。

群组服,比BongeeCord更好一点。随时保持更新。

Minecraft服务器历史上的一座里程碑。

优点:支持手机/Java双端共同游戏!!!在手机上享受Java服务端插件带来的乐趣。

缺点:并没有稳定版本。

最老的群组服。保持更新。

群组服,顾名思义就是链接多个服务器于一体,实现大型服务器。例如Hypixel,Mineplex,CubeCraft等国际知名服务器均使用群组服来运行整体(不一定用的Boungeecord)。子服使用任何服务端都可以,但需要端与端相互兼容,要不然穿梭的时候报错进不去。

二次元的服务端,据悉知好像是国人开花。版本为1.12.2,5个月没更新。

仅支持Craftbukkit/spigot/paperspigot插件

优点:多线程!服务器性能最大化!

缺点:没找到。

类似于GlowStone的开源服务端,支持1.12.2-1.14。

优点:多线程

缺点:不支持bukkit,sponge的api,开花状态

Cuberite是与Minecraft兼容的免费和开源(FOSS)游戏服务器。Cuberite在设计时充分考虑了性能,可配置性和可扩展性,并且还旨在准确地重现大多数原始功能。Cuberite用C ++编写,并且有一个广泛的插件系统,允许用户使用Lua编写自己的插件。实际上,许多内置命令都是由Core插件实现的,Core插件拥有自己的GitHub存储库和开发者社区。有关插件系统,如何使用以及如何开发的更多信息,请参见Plugins.(官网介绍,谷歌翻译制成)此服务端貌似可以在Android上运行。

全篇终,已故服务端不再介绍,没点用处。

Twitter:@HatsuyumeKagura

Google:Kagurahatsuyume@gmail.com

Web Site: http://www.iloli.fun

首先要知道游戏类型是什么,然后知道承载人数是多少,以及开发周期多少。需要根据这些来决定游戏架构和技术选型。

对于gameplay来说,本身就是个大循环,一定频率进行tick,接收来客户端或者其他服务器的rpc,处理逻辑,然后数据落地以及发送数据给客户端或者其他服务器,一般gameplay来说在同一个进程里都是同步的方式去编写,同步的实现大多数是单线程的,或者使用coroutine来实现actor这种模式。大部分游戏交互都是比较多,所以不论service和service之间的交互还是玩家和玩家之间的交互,如果考虑多线程的同步的问题,会非常复杂以及很容易做错,所以一个service内同一个时刻都是在一个线程中执行的。

针对mmo或者一些竞技类游戏往往有场景管理的概念,就是游戏AOI,比如一个玩家移动,需要告诉周围所有的玩家,复杂度在n*n,如果减少这个n,就有了AOI算法,比如九宫格,十字链表等,如果刚开服的时候很多人挤到一个主城中,就算采用九宫格和十字链表等AOI等算法,往往同屏内玩家数量还是很大,客户端渲染的单位数量比服务器少一个数量级的,所以场景管理这里还可以有个分线的做法,玩家多的时候,不同线不可见,玩家少的时候进行合并。

如果做帧同步一些关键点为表现要和逻辑分离,随机算法和随机种子的一致性,数学库浮点换定点,三角函数采用泰勒展开或者查表法,需要保序的容器,timer不能基于钟表时间而需要帧timer,以及防作弊(一般都是投票法,或者服务器跑个验证端)

现在很多游戏在线更新bug甚至不停服更新慢慢变成一种强需求了,实现这种方式主要使用脚本热更新,热重启+逻辑内存以及ab服切换来实现。


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/338096.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-05
下一篇2023-05-05

发表评论

登录后才能评论

评论列表(0条)

    保存