3D 游戏的万人同屏技术详解(2)

2020-08-23 10:22:42 +08:00
 gantleman
全文地址
https://zhuanlan.zhihu.com/p/195059458

在<使用 redis 实现 5 万人同服的'相位技术'>中我介绍了基于九宫格和相位技术的空间管理技术。这里我们也要借鉴游戏服务器中“服务”的概念。可能有些同学没有接触过游戏服务器,对服务的概念不是很熟悉。服务可以看做是一个独立的线程环境。这个线程监听着一个消息队列。其它的服务可以发送消息给他。这种方式在服务器开发中的 go 语言,erlang 语言,skynet 框架中被广泛应用。消息队列保证了服务所创建的数据是私有并且多线程安全的,只能通过消息通讯的方式进行修改。服务的概念为多线程下使用数据的安全问题提供了保护。通过消息通讯建立了在多线程下的秩序。但这种方式在客户端使用的并不多。各种服务的框架也都是在服务器端使用的多。

客户端使用多线程开发管理 1 万多个线程将会是一场噩梦。而管理 1 万多个服务对技术水平要求也还是比较高的。针对客户端没有多线程的服务框架问题,我开发了 pelagia 框架。借用“服务”的概念来管理客户端多线程。通过内嵌 kv 数据库和预判以及服务私有数据的概念彻底消灭多线程死锁和依赖的问题。因为只有解决多线程的安全问题。才能进一步思考如何优化通信和计算以及存储的平衡问题。安全问题不解决所有的优化问题就会是空中楼阁。

全文地址
https://zhuanlan.zhihu.com/p/195059458
24241 次点击
所在节点    推广
129 条回复
crackhopper
2020-09-24 16:20:38 +08:00
@gantleman 我哪里否定组件了?我说你的方案支持不了业务。真搞不明白你的理解力是什么鬼。
crackhopper
2020-09-24 16:22:17 +08:00
完全没法沟通。算了,不聊了。你自己 high 吧。看出来你也没啥技术可以说了,要不然也不会翻来覆去搞文字游戏了。文字游戏就没啥价值了,你当你自己赢了就好。
gantleman
2020-09-24 18:20:02 +08:00
@crackhopper 不客气,祝你用我教的技术早日做出属于自己的游戏。
Nicoco
2020-09-25 17:20:40 +08:00
有点东西
gzlock
2020-09-26 10:11:59 +08:00
dcie 有介绍过战地的服务器机制,大概内容是 fps 游戏的服务器也有计算频率,例如一秒 30 次(低配服务器)或 1 秒 60 次计算一次玩家的交互结果。
上面讨论的 1 万人一秒内同时射击敌人,按极端情况假设都是同一计算频率内( 0.03 秒内)互相射杀,其实可以忽略射击顺序了,有实证是在战地里我试过有射杀对方,对方也射杀我一换一同时死亡的操作。
在同一次服务器计算频率内忽略射击顺序的设定我觉得这个是合理的。
因为在现实中,两个西部牛仔快枪对决也有同时开枪同时命中的可能性。
不过在 0.03 秒内要处理一万个玩家的交互,我不怀疑,因为抛开预算谈服务器性能毫无意义,可能楼主用的是超算呢?
huai
2020-09-26 10:20:15 +08:00
本来也想看看,不过评论这么热闹。外行还是不参与了
gantleman
2020-09-26 10:57:44 +08:00
@gzlock 0.03 秒和 1 万要分开看。放在一起世界上任何一个 CPU 硬件都做不到。但 1 万台服务器每个服务器以 0.03 秒方式通信就可行了。分布式有分布式的技术解决方法。单机服务器有单机服务器的解决方法。
nirvanacqw
2020-09-26 16:53:13 +08:00
我怎么老在首页看到这个帖子
gantleman
2020-09-26 17:21:04 +08:00
@nirvanacqw 因为我肯掏钱推广分布式技术呀!肯真金白银拿自己钱做技术推广的才叫真爱。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/700635

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX