游戏预研杂记

简介: 游戏预研杂记

转载请注明出处:

1. 角色扮演游戏(Role-playing game),简称为RPG,是游戏类型的一种。在游戏中,玩家负责扮演这个角色在一个写实或虚构世界中活动。

玩家负责扮演一个或多个角色,并在一个结构化规则下通过一些行动令所扮演的角色发展。玩家在这个过程中的成功与失败取决于一个规则或行动方针的形式系统(Formal system)。

 

2. FPS(First-person Shooting game)第一人称视角射击游戏顾名思义就是以玩家的主观视角来进行射击游戏

 

3. MOBA,英文全称:Multiplayer Online Battle Arena,缩写:MOBA,中文翻译:多人在线战术竞技游戏,又被称为Action Real-Time Strategy(缩写:Action RTS,ARTS)动作即时战略游戏。

 

4. “MMORPG游戏”其实就是“大型多人在线角色扮演游戏”的英文缩写,属于电子游戏的一种。

MMORPG是角色扮演的一种,只不过是大型多人的,原名是Massive Multiplayer Online Role-Playing Game,就是指的现在大型多人在线角色扮演游戏。

在所有角色扮演游戏中,玩家都要扮演一个虚构角色,并控制该角色的许多活动。

 

游戏长链接预言

  1. 参考项目:
https://github.com/zfoo-project/tank-game-server/blob/main/README_CN.md
zfoo简介
https://github.com/zfoo-project/zfoo/blob/main/README_CN.md
NettyWebSocket 长链接,支持像 RequestMapper 资源映射
https://gitee.com/xiao-guo-coder/netty-web-scoket
nodejs
https://github.com/k8w/tsrpc-examples

 

go 游戏项目:

https://github.com/danie1Lin/Distributed-Golang-Game-Server

 

https://juejin.cn/post/7041560950897377293

 

状态同步和帧同步

一、同步 同步就是要多个客户端表现效果是一致的,而且对于大多数的游戏,不仅仅要表现一致,还要客户端和服务器的数据也是一致的。所以同步是个网络游戏概念,只有网络游戏才需要同步,而单机游戏是不需要同步的。

二、帧同步 帧同步的代表作当属当下最火的手游王者荣耀了吧,它就是帧同步完成的,也意味着它的核心的战斗逻辑写在客户端。帧同步经常被采用在RTS游戏(Real-Time Strategy )中。在游戏中,又客户端给服务器上传玩家的指令,服务器收到指令之后不做任何操作然后转发给所有的客户端。客户端来运算包括技能逻辑、普攻、属性,伤害、移动、Al、检测、碰撞等一系列的内容,这也是游戏中最核心和最难的部分。所有的客户端运算完成所有接收到的指令,并且修改相应的属性和对应的特效。

三、状态同步 状态同步和帧同步是相反的,它最核心的一系列东西都写在服务器端。当客户端发送要进行操作给服务器,服务器进行一系列的操作运算,然后把相应的结果发送给所有的客户端,客户端接到数据后修改属性。这里客户端相当于服务器的播放器一样,因为核心的判断都是在服务器的,一切的表现和属性都以服务器为准,就算客户端的血条是满的,服务器的血条是0,那依旧要死。

例子:一个角色要释放一个技能(非指向技能),

客户端告诉服务器我要释放一个技能 服务器通知所有客户端在某个地方以什么方向释放技能 客户端根据收到的信息创建一个特效放在这个地方,然后以某个方向飞行 服务器根据碰撞检测判断到某个时刻碰到了地方英雄,通知客户端 客户端根据服务器发来的信息删除特效,被打到的人减少血量播放收击特效 四、帧同步和状态同步的区别

  1. 流量 状态同步的消耗的流量比帧同步要多的多,因为状态同步所有的属性都是在服务器的,当某个角色的属性变化之后都需要同步给所有客户端,而且在一些复杂一些的玩家角色的属性有上百条,这样同步下来消耗是巨大的。而帧同步不需要做属性同步,服务器只需要做一次转发操作指令,属性这些都是客户端自己计算,所以消耗少的多。
  2. 回放和观战 帧同步比状态同步简单,因为只需要保存每局内所有人的操作就好了,当回放的时候只需要挨个播放这局所有的操作就好。状态同步需要有一个专门的服务器,当一局战斗打响,服务器给客户端发送消息的同时,还需要把这些消息发送给这个专门的服务器做存储,当有人看回放或者观战时,这个专门的服务器把存储起来的消息发就可以了
  3. 安全性 状态同步比帧同步安全性高很多,因为状态同步的所有数据和逻辑都是在服务器端保存的,要想作弊就必须修改服务器的值,这样难度就会高很多;而帧同步所有的数据时在客户端,只要解析客户端的数据之后就可以达到自己想要的效果。

4.断线重连 帧同步的锻炼重连时比较麻烦的,当你在10分钟的时候断线了,在15分钟回来,就需要把服务器这15分钟的消息一次性的发送给客户端,然后客户端加速整个游戏的核心逻辑运算,直到追上现有进度。状态同步很简单,重新把整个场景中的任务全部重新生成一边,各种数值根据服务端提供的信息加到任务身上即可。

  1. 开发效率 状态同步的游戏占主流,同一个功能至少需要一个客户端和服务器共同完成,开发起来比较困难。而帧同步服务器开发难度低,服务器只需要转发,而帧同步不需要和服务器的沟通交状态同步,开发的效率也高。 ———————————————— 版权声明:本文为CSDN博主「choudan8888」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/choudan8888/article/details/118414664

 

 

游戏开发中网络通讯协议对比

 

在网络游戏开发中,通讯协议是一个无法被避免的问题,无论对于客户端开发中还是服务器开发程序猿而言,制定一个合适的通讯协议是很有必要的

游戏联网需求有弱联网游戏,即时互动类游戏

选择通讯协议的时候主要关注于延迟低,易用,低成本等

 

下面对比TCP,UDP,HTTP,WebSocket 四种协议优缺点、特性

TCP:

优点: 可靠性 、全双工协议、开源支持多、应用较广泛、面向连接、研发成本低、报文内容不限制(IP层自动分包,重传,不大于1452bytes)

缺点: 操作系统:较耗内存,支持连接数有限、设计:协议较复杂,自定义应用层协议、网络:网络差情况下延迟较高、传输:效率低于UDP协议

特性: 面向连接、可靠性、全双工协议、基于IP层、OSI参考模型位于传输层、适用于二进制传输

 

UDP

优点: 操作系统:并发高,内存消耗较低、传输:效率高,网络延迟低、传输模型简单,研发成本低

缺点: 协议不可靠、单向协议、开源支持少、报文内容有限,不能大于1464bytes、设计:协议设计较复杂、网络:网络差,而且丢数据报文

特性:无连接,不可靠,基于IP协议层,OSI参考模型位于传输层,最大努力交付,适用于二进制传输

 

HTTP:

优点: 协议较成熟,应用广泛、基于TCP/IP,拥有TCP优点、研发成本很低,开发快速、开源软件较多,nginx,apache,tomact等

缺点: 无状态无连接、只有PULL模式,不支持PUSH、数据报文较大

特性: 基于TCP/IP应用层协议、无状态,无连接、支持C/S模式、适用于文本传输

 

WebSocket

优点:协议较成熟、基于TCP/IP,拥有TCP优点、数据报文较小,包头非常小、面向连接,有状态协议、开源较多,开发较快

缺点:没发现啥缺点

特性:有状态,面向连接、数据报头较小、适用于WEB3.0,以及其他即时联网通讯

 

 

协议选择

通过以上对协议特性分析,我想大家心里已经有低儿了。建议:

1、对于弱联网类游戏,必须消除类的,卡牌类的,可以直接HTTP协议,考虑安全的话直接HTTPS,或者对内容体做对称加密;

2、对于实时性,交互性要求较高,且team有过相关经验,可以优先选择websocket,其次TCP协议;

3、对于实时性要求极高,且可达性要求一般可以选择UDP协议;

4、局域网对战类,赛车类,直接来UDP协议吧(公网对战,P2P的UDP还得“打洞”处理) ———————————————— 版权声明:本文为CSDN博主「honey199396」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/honey199396/article/details/54603860

 

netty中的NIO Socket底层使用的就是TCP协议,所以我们只需要像常用的netty客户端服务一样构建客户端即可。

 

1.Socket通讯 TCP/IP协议是一种通用的、跨语言、跨操作系统、跨机器的通讯方案。这也是开发者首先想到的一种手段。在使用上,有使用TCP和UDP两个选择。一般我们倾向在游戏系统中使用TCP,因为游戏数据的逻辑相关性比较强UDP由于可能存在的丢包和重发处理,在游戏逻辑上的处理一般比较复杂。由于多进程系统的进程间网络一般情况较好,UDP的性能优势不会特别明显。

要使用TCP做跨进程通讯,首先就是要写一个TCP Server,做端口监听和连接管理;其次需要对可能用到的通信内容做协议定制;最后是要编写编解码和业务逻辑转发的逻辑。这些都完成了之后,才能真正的开始用来作为进程间通信手段。

———————————————— 版权声明:本文为CSDN博主「森明帮大于黑虎帮」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/qq_44918090/article/details/126510455

 

 

链接

Springboot使用netty应用tcp协议

https://blog.csdn.net/qq_27535933/article/details/122107134

 

经典游戏服务器端架构

https://blog.csdn.net/qq_44918090/article/details/126510455?spm=1001.2014.3001.5502

 

https://blog.csdn.net/qq_44918090?type=blog

 

服务器解决了什么问题、状态同步和帧同步

https://blog.csdn.net/qq_44918090/article/details/126505660

 

游戏 帧同步 实现

https://blog.csdn.net/best789248/article/details/78439254?spm=1001.2014.3001.5502

二进制的世界

https://blog.csdn.net/best789248?type=blog

 

游戏 场景同步 实现(状态同步)

https://blog.csdn.net/best789248/article/details/78434114

 

 

链接

Springboot使用netty应用tcp协议

https://blog.csdn.net/qq_27535933/article/details/122107134

 

经典游戏服务器端架构

https://blog.csdn.net/qq_44918090/article/details/126510455?spm=1001.2014.3001.5502

 

https://blog.csdn.net/qq_44918090?type=blog

 

服务器解决了什么问题、状态同步和帧同步

https://blog.csdn.net/qq_44918090/article/details/126505660

 

游戏 帧同步 实现

https://blog.csdn.net/best789248/article/details/78439254?spm=1001.2014.3001.5502

二进制的世界

https://blog.csdn.net/best789248?type=blog

 

游戏 场景同步 实现(状态同步)

https://blog.csdn.net/best789248/article/details/78434114

 

链接

Springboot使用netty应用tcp协议

https://blog.csdn.net/qq_27535933/article/details/122107134

 

经典游戏服务器端架构

https://blog.csdn.net/qq_44918090/article/details/126510455?spm=1001.2014.3001.5502

 

https://blog.csdn.net/qq_44918090?type=blog

 

服务器解决了什么问题、状态同步和帧同步

https://blog.csdn.net/qq_44918090/article/details/126505660

 

游戏 帧同步 实现

https://blog.csdn.net/best789248/article/details/78439254?spm=1001.2014.3001.5502

二进制的世界

https://blog.csdn.net/best789248?type=blog

 

游戏 场景同步 实现(状态同步)

https://blog.csdn.net/best789248/article/details/78434114

 

 

 

从市场来看,以Go为主要语言的商业模式基本是视频、通讯、游戏、云设施等,业务不是特别复杂,但要求性能好。当然,java语言的性能还不错,但是确实很吃资源。

Go 的公共库质量很差,而且 Go 的包管理实际上一直在变化。这是个大问题。从职业上来说,go更适合C++转换。

还有企业级开发、电子商务、大数据公司、金融支付等等,你基本可以想到java的影子。 Go不适用于业务复杂、数据处理多样的系统。如变换、多重排序、过滤、聚合。这时候的java真的香了,永远也不过分。没有必要重复创造汽车和马匹。这是Java成功的关键。历史已经尘埃落定,以至于 Java 提供了太多的选择。

 

业务越复杂,越适合用java。 java的性能非常强,比如网站12306和淘宝就足以证明这一点。 Go 语言甚至没有一个有用的缓存框架。

 

与 Java 相比,go 仍然是一门相当不成熟的语言。

Go语言设计的初衷是快速解决问题,学习门槛低。

https://www.joyindie.com/articles/6151.html

 

擅长的领域不同

Go从诞生到现在,都是致力于将编程简单化,go更偏向于效率。Java的优势依旧在于安全、稳定,跨平台。

 

protostuff 与 protobuf

 

Google的protobuf因为其编码后体积小,序列化/反序列化性能好,被广泛使用。但是protobuf需要编写.proto文件,再通过protobuf转换成对应的java代码,非常不好维护。

protostuff就是为了解决这个痛点而产生的。通过protostuff,不需要编写.proto文件,只需要编写普通的java bean就可以使用protobuf的序列化/反序列化。

protostuff有两个东西:Schema和Runtime Schema

链接:https://www.jianshu.com/p/6cfa88606260

 

java序列化/反序列化之xstream、protobuf、protostuff 的比较与使用例子

http://www.javashuo.com/article/p-gnixjckj-ma.html

 

netty结合Protostuff传输对象案例,单机压测秒级接收35万个对象

https://blog.csdn.net/tianyaleixiaowu/article/details/107714868

 

从零学Netty(十)Netty心跳处理器

https://lionli.blog.csdn.net/article/details/109203108

 

netty 与 websocket 对比

websocket是一个通信协议,而netty是一个Java网络编程框架。我们可以利用netty实现websocket通信,也可以用其他的。

 

netty-example

  https://gitee.com/doveylovey/netty-example?_from=gitee_search#https://gitee.com/link?target=https%3A%2F%2Fwww.cnblogs.com%2Fsnail-gao%2Fp%2F15595747.html

 

 

 


Go语言圣经(中文版)

https://docs.hacknode.org/gopl-zh/

details/122107134

Go语言高级编程

https://books.studygolang.com/advanced-go-programming-book/

 

Go语言中国(重生)

https://github.com/golang-chinadetails/122107134

 

go语言分布式游戏项目

https://github.com/danie1Lin/Distributed-Golang-Game-Server

 

 

 

 

 

标签: 经验总结

目录
相关文章
|
2月前
|
前端开发 JavaScript UED
不可思议!前端小白如何靠这些技巧逆袭,成为团队中的闪耀之星?
前端开发对初学者来说充满挑战,但通过正确的方法和技巧,你可以从新手蜕变为高手。本文分享前端小白逆袭的秘诀,包括夯实HTML、CSS与JavaScript基础,掌握前端框架与库,提升性能优化技巧,以及持续学习与分享。示例代码展示了简单的HTML+CSS+JavaScript页面和Vue组件,帮助你逐步进阶。
29 4
|
2月前
|
编解码 前端开发 JavaScript
前端界的黑科技:掌握这些技术,让你的网站秒变未来感十足!
【10月更文挑战第31天】前端技术日新月异,黑科技层出不穷,让网页更加美观、交互更加丰富。本文通过响应式布局与媒体查询、前端框架与组件化开发等案例,展示这些技术如何让网站充满未来感。响应式布局使网站适应不同设备,前端框架如React、Vue则提高开发效率和代码质量。
52 3
|
程序员 图形学 C++
一个无知oier的娱乐——我的游戏开发经历
一个无知oier的娱乐——我的游戏开发经历
111 0
|
设计模式 算法 安全
弯道超车!阿里P5~P8学习路线终发布,程序员进阶的关键所在
我们都知道优秀程序员的成长之路就是一条不断打怪升级之路。相信很多人都思考过以下问题:初级程序员如何快速成长?怎样从—个初学者成长为一名合格的程序员?又如何从一名合格的程序员登上职业高峰,成为一名CTO(首席技术官)呢?
|
数据可视化 开发工具 开发者
一个小游戏开发者的心路历程
可视化工具刚发布第一批版本的时候,我就通过同事的介绍了解到了这个开发工具,作为一名有着游戏梦想的产品经理,这个工具的发布让我看到了能够实现自己游戏梦想的一个最简单的方式,简单的可视化操作界面,让这个工具在交互体验上,给了想制作游戏但是没有代码基础的广大新手最友好的帮助。
108 0
|
开发者
游戏要从简单做起
嗨!大家好,我是小蚂蚁。 做游戏要从简单做起,尤其是对于新手开发者,一定要从简单做起。如果在啥也不会的时候,一上来就想做个大而复杂的,那结果只能是以失败告终。 有目标是好事情,但是前提是目标要合理,登顶珠峰是一个好目标,但是对于一个从未登山的人来讲,很显然这不适合当作第一个目标。
96 0
|
存储 弹性计算 分布式计算
科普达人丨一文弄懂什么是云计算?
云计算的定义、分类,以及发展历程。
科普达人丨一文弄懂什么是云计算?
|
架构师 测试技术 程序员
全攻略!!!告诉学弟学妹怎么入行游戏行业
有粉丝问我想要做游戏,怎么才能进入游戏行业呐?忆当年,已过十余载,当年大学毕业的时候有学姐进入珠海西山居做测试,当时觉得很高端,好想进去,可惜没有如意,当时觉得很遗憾,不过两年后我还是进入了游戏行业,只是为了弥补遗憾,为了不让和我有同样想法的同学有遗憾,今天聊一下具体入行攻略。
261 0
全攻略!!!告诉学弟学妹怎么入行游戏行业
|
人工智能 Kubernetes Cloud Native

热门文章

最新文章