高手问答第 268 期 —— 聊聊游戏服务器设计

小白兔爱吃大灰狼 发布于 2021/09/22 14:47
阅读 8K+
收藏 23

游戏服务器是一种典型服务器,它与Web服务器相似却又不同。相同点在于它们都是基于网络、数据库、分布式、线程调度来构建;不同点在于游戏业务与web业务不同,大多是有状态的业务。这就要求游戏服务端使用合理的架构和设计。

OSCHINA 本期高手问答(9 月 23日- 9 月 29日)我们请来了 @罗培羽 和大家一起探讨关于游戏服务器设计相关的问题。可讨论的问题包括但不限于:

  1. 游戏服务器入门,需要学习哪些?
  2.  “游戏服务器开发工程师”有哪些岗位?
  3. 游戏服务器架构的探讨
  4. 关于服务器底层(网络、多线程、分布式……)的探讨
  5. 关于游戏开发的工程问题?

或者其它关于游戏服务器设计的相关问题,也欢迎大家积极提问

嘉宾简介

罗培羽,现任职于广州四三九九公司技术研发中心,参与游戏项目开发及前沿技术研究。

在开源中国发表的“epoll掐死教程广受好评。评论认为“从计算机的硬件讲起,这种思路和写法值得学习”、“比看过的任意一篇关于epoll select的文章都要好”

近年畅销专著有《Unity3D网络游戏实战(第2版)》,被国内多家高校选为软件工程专业“计算机网络应用”、“VR引擎应用技术”等专业的教材;著作也被一些游戏公司选为新人培训的材料。

为了鼓励踊跃提问,@华章IT 会在问答结束后从提问者中抽取 5 名幸运用户赠予 《百万在线——大型游戏服务端开发》 一书。

购买链接:https://item.jd.com/12931061.html

OSChina 高手问答一贯的风格,不欢迎任何与主题无关的讨论和喷子。

下面欢迎大家就相关问题向@罗培羽 老师 提问,直接回帖提问即可。

加载中
0
小白兔爱吃大灰狼
小白兔爱吃大灰狼
恭喜以上五位网友分别获得 《百万在线——大型游戏服务端开发》  图书一本
请于10月8日前登陆账号,个人主页-修改个人资料,完善一下收货信息哦,奖品将在10月8日后寄出哦
南方Go
南方Go
已完善,感谢罗老师,感谢开源中国
贺小皮蛋
贺小皮蛋
已完善
4
罗培羽
罗培羽

@小美玲


以下是《百万在线:大型游戏服务端开发》原稿中废弃的一部分内容,讲的是mmorpg架构,后续书籍做了很多优化,这部分没有放到最终书本里,但也可以作为参考。

 

1
z
zzy00321

@罗培羽 对于帧同步的游戏,服务器端怎样选取一个合适的时间间隔来处理收到的多帧数据?对于落后服务器时间帧太多的客户端应该如何快速追帧?

罗培羽
罗培羽
一般而言,每秒8-15次的同步是较为合适的,可以参考这个时间间隔,相对而言较为平衡操作的反馈和网络负载。但如果使用tcp,同步次数就要更低一些。对于落后太多时间的,客户端快速模拟,模拟过程中会屏蔽该玩家的操作,避免出现数据错乱。如果实在落后太多,就只能把这名玩家提出游戏了,以免影响其他玩家。
0
LeoXu
LeoXu

@罗培羽 请教下老师,我是做企业应用开发的,想了解下大型多人在线游戏的服务端开发技术是否有可供我所在这个领域借鉴的实用技术和经验?最好是实际在应用的案例,请介绍下,谢谢!

罗培羽
罗培羽
对企业应用开发了解不是很多,不太了解企业应用开发和游戏服务端间的共同点和差异,只能说说粗浅的一点理解。游戏服务端的难点,在于玩家间有着很复杂的状态,相比于web就不容易做成独立的分布式结构。至于和企业应用开发相似的,游戏服务端也涉及很多数据库相关内容,游戏服务端需要保存大量的玩家数据,对查询效率有考究,同时也需要考虑数据版本兼容,这些方面或能有所参照。
0
贺小皮蛋
贺小皮蛋

@罗培羽 老师我本身对游戏领域的开发不是很懂,就是一直很好奇 比如一些实时的网络游戏 怎么可以快速的进行攻击伤害等计算, 是每次都要请求服务器吗  如何在集群的情况下保证消息有序  以及针对用户手机本身 可以有哪些性能的优化空间   还有就是如何有效的防止用户作弊

贺小皮蛋
贺小皮蛋
这应该就是手机发热的原因 哈哈哈
贺小皮蛋
贺小皮蛋
回复 @罗培羽 : 没想到回复的这么详细 感谢老师给我科普
书生小兰
书生小兰
老师,您好,实时游戏服务端怎么解决网络延迟问题?
罗培羽
罗培羽
(4)如何有效的防止用户作弊 《百万在线》的第10章就是讲如何防作弊的。服务端防作弊的核心要点,就是要尽可能多地让服务端做逻辑运算、尽可能多地校验客户端的运算结果,不相信客户端的一切输入。
罗培羽
罗培羽
(3)针对用户手机本身 可以有哪些性能的优化空间 手机客户端和PC差别很大,不过如果说到服务端,手机游戏和端游的服务端差别并没有很大。对于手机的优化,主要在网络方面。比如手机的网络不稳定,服务端要做好断线重连之类的功能;还需要压缩网络通信的数据包大小。
下一页
0
Laixhe
Laixhe

@罗培羽 老师,如何解决跨服务器多人同步问题的

罗培羽
罗培羽
这就涉及到服务端的拓扑结构和架构设计。同步核心是消息传递,多个服务器消息是可以互通的,消息传递并没有很大问题,而局域网内的消息传递速度一般也在几毫秒,是可以接受的。
0
开源中国首席路人王
开源中国首席路人王

@罗培羽 您好,请问做游戏开发逻辑是不是服务端开发复杂?还有UI都是怎么做的?

caiqya
caiqya
回复 @罗培羽 : 别回他,机器人
罗培羽
罗培羽
(2)[UI怎么做的?] 像Unity、虚幻4等游戏引擎都会提供UI编辑的功能,可以通过拖拽等方式改变图片、按钮的位置。通过UI编辑器做出一个界面文件(可以当做是xml描述文件),然后代码加载这个界面文件做显示。总之,游戏引擎一般都提供了制作游戏界面的完整方案。
罗培羽
罗培羽
(1)[开发逻辑是不是服务端开发复杂?] 游戏逻辑开发,目前来看服务端要比客户端复杂。一方面客户端游戏引擎会整合物理碰撞、寻路等一些功能,而服务端大部分需要开发者自行实现;另外服务端要处理很多玩家的逻辑,对性能的要求更多。
0
懒猫cat
懒猫cat

@罗培羽 竞技类的一些需求边界一般怎么处理呢,比如有一个资源有10个,玩家都去做采集,那如果11个人是在同一时间抢到的,多出来的一个人要怎么处理这种边界问题

罗培羽
罗培羽
(以上留言触发了屏蔽字,一直没能发出,分段一句句尝试哪个词触发了)
罗培羽
罗培羽
可按顺序处理。
罗培羽
罗培羽
系统收到协议的时间也会有不同,
罗培羽
罗培羽
就算两个玩家同一时间操作,
罗培羽
罗培羽
上述的例子中,会把一个场景的逻辑都给一个线程处理,消息先到先得。
下一页
0
xcbeyond
xcbeyond

@罗培羽 在游戏开发中,与其它非游戏后端开发会存在哪些最大的差异呢?比如一直长期从起非游戏类的后端开发者,在进入游戏后端开发领域有哪些要求么?或者在求职时,需要额外准备关于游戏开发中的什么内容、技能?

xcbeyond
xcbeyond
回复 @罗培羽 : 个人觉得,游戏类开发更多不同点,是游戏场景的不同,考虑到的侧重点不同。对于长期从事非游戏类后端开发人员而言,缺失的是游戏思维,单纯从技术角度而言,差异不大吧
xcbeyond
xcbeyond
回复 @罗培羽 : 有状态在非游戏里类的后端开发中,也是很常见的。个人觉得这一点与游戏类开发 没啥多大不同
罗培羽
罗培羽
回复 @xcbeyond : 有状态一般意味使用长连接,而不是http这样的短连接。服务器间也通过网络传输,不过因为需要保存状态,很多web的方案比如双机热备之类,就不太适用
xcbeyond
xcbeyond
回复 @罗培羽 : 回答(1)
罗培羽
罗培羽
回复 @xcbeyond : 哪类问题..
下一页
0
爪巴戈
爪巴戈

 对这个领域不懂,发问都无从谈起!

罗培羽
罗培羽
^_^
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部