突然心血来潮,想从事游戏后端开发,求打醒我。
顺便 V 友们给我科普科普一下游戏服务端和传统的 Web 服务端的区别和坑在哪里和需要掌握哪些技术。
谢谢各位了。
1
opengps 2020-07-08 22:51:51 +08:00 3
游戏偏向于通信,我理解必然要求写 4 层 socket 通信(udp,tcp 都用)
但是 web 后端,大部分人可能只写过 7 层 http ( s )通信 |
2
jiangzhuo9357 2020-07-08 22:54:11 +08:00
咱还是说说相同点比较好……
|
3
Graves 2020-07-08 22:59:03 +08:00 via iPhone
我也有个疑问,互联网项目和金融项目有什么区别,第一感觉就是金融需要安全性更高,具体高在哪?
|
4
MeteorCat 2020-07-08 23:00:33 +08:00 via Android
天差地别
|
5
kaiki 2020-07-08 23:02:19 +08:00
为啥要打醒,这个不是也挺好?
|
6
LokiSharp 2020-07-08 23:07:23 +08:00
低实时要求的没区别直接 http 就行,高实时要求的得手撸 socket
|
7
lululau 2020-07-08 23:14:31 +08:00 via iPhone
@Graves 金融行业都在 https 里再包一层加密,用 rsa 加密完整报文,还有的用私钥加密公钥解密🤦♂️
|
8
systemcall 2020-07-08 23:15:46 +08:00 via Android
感觉可以试试做页游,既是 Web 开发又是游戏开发,实时的要求低,赚钱快
|
10
mmdsun 2020-07-08 23:40:50 +08:00 via Android 1
游戏客户端和服务器端基本上一直要保持连接,不是典型的 Request-Response 模式。需要长链接 socket 之类的。和一般后台开发差有些大。
那 Java 和 C#技术栈举例的话。 Java 的话一般后台开发用 spring boot 就够了。游戏要上 netty .net 普通 MVC 肯定不够用,SignalR 需要用到。 大型游戏服务器一般用 C,Erlang,Golang,lua 这几种语言比较多。 另外可以看一下 GitHub 上面热门游戏服务器框架。 GitHub 上有哪些不错的游戏服务器框架? https://www.zhihu.com/answer/1064619916 |
11
raaaaaar 2020-07-09 01:04:09 +08:00 via Android 2
游戏行业加班是不是要严重些。。
|
12
wenlele 2020-07-09 07:41:50 +08:00
没真正从事过游戏的研发工作,但我觉得从业务需求去考虑,游戏后端和 web 后端差别应该挺大的。
光是考虑常用的非功能性指标,游戏后端对可用性、健壮性、时延、错误容忍度等的要求应该会高许多,导致使用的技术架构会有更大的差异,比如我猜游戏后端的通信会依赖长连接的技术,游戏很多静态资源会放在客户端,或者强依赖于 CDN 等网络技术减轻服务端数据传输的压力。 而且,当业务复杂度很大的时候,即使同时 web 后端,顶层抽象的技术架构可能差异不大,但具体的技术架构也会有很大的差异。没有什么技术架构能简单打包就能被其他产品使用的。 我想游戏后端也是如此的。 |
13
zqx 2020-07-09 07:44:23 +08:00 via Android
@Graves 开发环境是局域网,Java 或 Node 的依赖都要手动维护一份版本列表,然后拷贝进开发环境,CICD 的时候也都是局域网。产品本身倒不一定有多安全,rsa 加密之类的和互联网应该一样
|
14
zjsxwc 2020-07-09 08:10:39 +08:00
N 年前网游后端直接就是个 sqlserver 数据库吧,存储过程一把梭,逃
|
15
hanxiV2EX 2020-07-09 08:11:17 +08:00 via Android
游戏后台管理系统开发属于 web 后端,可以先从游戏后台开发转游戏开发,我一个朋友转了两年游戏后端又回到 web 后端了,哈哈哈。。。
|
16
delectate 2020-07-09 08:31:21 +08:00
当然都是加密后的长连接。
短链接很容易被篡改,至于说 http,只适合页游。 很多年前,有一些比较弱逼的游戏,甚至本地改内存都能作弊,就是逻辑没处理好。 怎么解决这个问题呢,我记得有一下几种方案,通常使用 1 种或者多种并用(很久没有研究了,相关资讯可能有点落后,楼下请继续补充): 1 、客户端校验资源和数据文件完整性; 2 、检查客户端是否有可疑程序(类似期货的“看穿式监管”,搜集 ip 、mac 、磁盘序列号等所有数据); 3 、通信数据加密; 4 、保持长连接; 5 、逻辑检测(比如在坐标 a,b,不可能跨越时空出现在另一个坐标 c,d ); 6 、行为检测(比如超越人类极限的 1ns 手速,或者固定模式的行为逻辑)。 |
17
scr 2020-07-09 09:00:13 +08:00
差别很大. 游戏重实时, 用的长连接, 大部分公司里, 996 算休假模式
|
18
optional 2020-07-09 09:30:06 +08:00 1
300ms 和 30ms 的区别。
|
20
Mutoo 2020-07-09 09:39:23 +08:00
不同的游戏,后端区别也很大,MMORPG 跟棋牌游戏就是两种极端,FPS 、格斗游戏又是另一番天地。
业务方面有游戏服务器管理、大厅、匹配、任务、活动、公会、玩家、升级、道具、交易、聊天、抽奖等等系统。 实时性要求高的游戏,后端要处理数据同步问题、断线重连问题。 |
21
brader 2020-07-09 09:43:07 +08:00
@lululau 张口就来?连 HTTPS 通讯,内容都不是 RSA 加密的,只是在握手阶段,用 RSA 加密传输 key,数据传输阶段,用 key 对称加密算法的。
为什么不使用 RSA 加密内容呢? 1.加解密性能问题。 2.RSA 能加密的明文长度是有限制的。 所以,就算银行在传输内容中使用 RSA 加密,也只是部分敏感明文信息使用 RSA,而不可能所有明文使用 RSA |
22
xuanbg 2020-07-09 09:52:03 +08:00
最大的区别就是游戏后端接口大部分只有 action 和 action 对象作为输入参数,而且接口也没有 web 后端那么多。
|
23
zdt3476 2020-07-09 09:58:03 +08:00
楼上很多人说 http 适合页游是不太对的。正确来说,使用长连接和短链接主要区别是这个游戏是弱联网游戏。很多页游也是需要长连接的。比如很多微信小游戏,只有获取排行榜之类的模块的时候需要请求后端服务器,这种使用 http 就够了。有些页游需要实时对战同步战斗数据的,这种也是需要长连接的。
|
24
hantsy 2020-07-09 10:02:46 +08:00
游戏也有走 HTTP 的。
|
25
594duck 2020-07-09 10:10:14 +08:00
端游要 Socket 编程。这年头的互联网从业人员都是搞 HTTP 的,对 Socket 编程不熟悉(太复杂了)。至于某些回答说游戏走 HTTP 的
页游是走 HTTP 的居多,那东西没啥实时性,一个服务器 1000 人顶了天了。所以 HTTP 撑的住。 你要端游走 HTTP,谁见过么?我是没见过。从末见过端游走 HTTP 的。 另外端游动不动万人在线一个服务器,架构也是水平分布的。 我 10 年搞端游的时候,一个 MAP 服务可以拆十来台服务器,如果有需求,什么算钱的服务,MAP 服务,PK 图的服务,后台的服务,可以拆的多了。 人家毕竟叫,大型多人 MMORPG 。 像魔兽世界这种,连副本都可以拆成服务器来 RUN (变像的 MAP 服务的服务器) 说点题外话 2008 年的时候在 IDC 碰到一个土豪,每个柜子放一台 F5 。我问这是谁的,太有钱了,旁边的哥们说,我们是盛大的。我说一台一个 F5,你们钱多烧啊。 盛大”一台 F5 的钱也就是一组传奇一个月回本,你要把眼界放宽点“ 大哥,我请你吃饭吧。你们这水平要求高么。钱多么。。。 |
26
594duck 2020-07-09 10:11:59 +08:00
游戏公司在 13 年还不是 LOW B 的时候,那时候游戏公司爽啊。
某游戏上线大会,就是一办公室里坐满了人,什么客服,运维,程序,产品经理,数值经理全在里边。 会议桌上放着一堆钱,用罩子罩着 上线一周疯狂加班,上线后一周疯狂开服。 然后上线成功,上线人数稳定,百万注册,几十万在线。老板当场开罩子分钱。那时候爽啊。 再看现在的互联网老板,扣扣索索,也叫老板。。。真的是。 |
28
lniwn 2020-07-09 10:29:46 +08:00 1
除了上面很多人已经提到的,还有一点,是业务开发层面的区别,游戏服务器是逻辑帧驱动,考核指标是多少毫秒内要执行完一帧,但是 web 服务器是事件驱动的,有 request 就触发执行逻辑。
不管有没有 client 在链接,游戏服务器都是按照时间一帧一帧来执行的,但是对于 web 服务器,如果没有 client,那服务端就不会执行任何逻辑了(定时或者延时任务之类的除外)。 |
29
fireleaves 2020-07-09 10:35:49 +08:00 via Android 1
游戏行业 MMORPG 后端,基本没有做过 Web 后端。
网络通讯确实是长连接,有自己的网络库,基于 epoll 封装,MMO 还可以是 TCP,至于 MOBA 就只能是 UDP 了。通讯数据格式用 protobuf 。 实时性要求相对较高,目前所在的项目,服务器是 10 帧,现在测试的话一般一条协议或者一个 tick 超过 100ms 就要有警告了。 业务比较复杂,耦合度比较高,里边各种养成,例如装备,锻造,宠物,伙伴等,各种玩法,各种场景切换。这一部分基本是体力活。 服务端压力较大,同场景人数,移动,技能要给视野内玩家广播,同一刻消息数量大,性能差会限制玩法的实现,例如多人战斗的玩法。这部分基本可以看作 MMO 核心。 网关是项目组自己实现的。没有用 Redis,直连 MySQL,一个服一个库,服里人数有上限,所以还 OK,业务对内存操作,落地到库走一个自己的中间件。当然也有很多项目用 Redis,前几天有个项目分享了用阿里云 Redis 集群的踩坑经历。 加班就一句,12 点下班要偷偷摸摸的,周六不来要请假,当然基本没有不来的。 不知道转行互联网容易不🥺 |
30
edk24 2020-07-09 10:51:07 +08:00
看你是做哪一种游戏, web 游戏得 ws http(s), 客户端游戏得会 socket udp tcp 加密通信
没做过游戏, 但从通信协议上来讲应该是这样. 而且游戏服务端一般多是 c++ python 亦或者 java 之类的语言来开发, 要么追求极致的性能把服务器压榨干净, 要么是开发比较容易 |
31
sadfQED2 2020-07-09 19:12:28 +08:00 via Android
@fireleaves 我旁边就是完美世界跳出来的同事,他表示加班属实
|