游戏后端和 Web 后端有什么区别? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答术问题时复制粘贴 AI 生成的内容
yoke123
V2EX    程序员

游戏后端和 Web 后端有什么区别?

  •  2
     
  •   yoke123 2020-07-08 22:39:46 +08:00 10107 次点击
    这是一个创建于 1923 天前的主题,其中的信息可能已经有所发展或是发生改变。

    突然心血来潮,想从事游戏后端开发,求打醒我。

    顺便 V 友们给我科普科普一下游戏服务端和传统的 Web 服务端的区别和坑在哪里和需要掌握哪些技术。

    谢谢各位了。

    第 1 条附言    2020-07-09 10:40:48 +08:00
    这。。。。。。我还是继续当 CRUD Boy 吧。。。。。
    31 条回复    2020-07-09 19:12:28 +08:00
    opengps
        1
    opengps  
       2020-07-08 22:51:51 +08:00   3
    游戏偏向于通信,我理解必然要求写 4 层 socket 通信(udp,tcp 都用)
    但是 web 后端,大部分人可能只写过 7 层 http ( s )通信
    jiangzhuo9357
        2
    jiangzhuo9357  
       2020-07-08 22:54:11 +08:00
    咱还是说说相同点比较好……
    Graves
        3
    Graves  
       2020-07-08 22:59:03 +08:00 via iPhone
    我也有个疑问,互联网项目和金融项目有什么区别,第一感觉就是金融需要安全性更高,具体高在哪?
    MeteorCat
        4
    MeteorCat  
       2020-07-08 23:00:33 +08:00 via Android
    天差地别
    kaiki
        5
    kaiki  
       2020-07-08 23:02:19 +08:00
    为啥要打醒,这个不是也挺好?
    LokiSharp
        6
    LokiSharp  
       2020-07-08 23:07:23 +08:00
    低实时要求的没区别直接 http 就行,高实时要求的得手撸 socket
    lululau
        7
    lululau  
       2020-07-08 23:14:31 +08:00 via iPhone
    @Graves 金融行业都在 https 里再包一层加密,用 rsa 加密完整报文,还有的用私钥加密公钥解密♂
    systemcall
        8
    systemcall  
       2020-07-08 23:15:46 +08:00 via Android
    感觉可以试试做页游,既是 Web 开发又是游戏开发,实时的要求低,赚钱快
    Graves
        9
    Graves  
       2020-07-08 23:21:35 +08:00 via iPhone
    @lululau #7 套娃? https 再套一层自己实现的类 https ?
    mmdsun
        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
    raaaaaar
        11
    raaaaaar  
       2020-07-09 01:04:09 +08:00 via Android   2
    游戏行业加班是不是要严重些。。
    wenlele
        12
    wenlele  
       2020-07-09 07:41:50 +08:00
    没真正从事过游戏的研发工作,但我觉得从业务需求去考虑,游戏后端和 web 后端差别应该挺大的。

    光是考虑常用的非功能性指标,游戏后端对可用性、健壮性、时延、错误容忍度等的要求应该会高许多,导致使用的技术架构会有更大的差异,比如我猜游戏后端的通信会依赖长连接的技术,游戏很多静态资源会放在客户端,或者强依赖于 CDN 等网络技术减轻服务端数据传输的压力。

    而且,当业务复杂度很大的时候,即使同时 web 后端,顶层抽象的技术架构可能差异不大,但具体的技术架构也会有很大的差异。没有什么技术架构能简单打包就能被其他产品使用的。 我想游戏后端也是如此的。
    zqx
        13
    zqx  
       2020-07-09 07:44:23 +08:00 via Android
    @Graves 开发环境是局域网,Java 或 Node 的依赖都要手动维护一份版本列表,然后拷贝进开发环境,CICD 的时候也都是局域网。产品本身倒不一定有多安全,rsa 加密之类的和互联网应该一样
    zjsxwc
        14
    zjsxwc  
       2020-07-09 08:10:39 +08:00
    N 年前网游后端直接就是个 sqlserver 数据库吧,存储过程一把梭,逃
    hanxiV2EX
        15
    hanxiV2EX  
       2020-07-09 08:11:17 +08:00 via Android
    游戏后台管理系统开发属于 web 后端,可以先从游戏后台开发转游戏开发,我一个朋友转了两年游戏后端又回到 web 后端了,哈哈哈。。。
    delectate
        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 手速,或者固定模式的行为逻辑)。
    scr
        17
    scr  
       2020-07-09 09:00:13 +08:00
    差别很大. 游戏重实时, 用的长连接, 大部分公司里, 996 算休假模式
    optional
        18
    optional  
       2020-07-09 09:30:06 +08:00   1
    300ms 和 30ms 的区别。
    paoqi2048
        19
    paoqi2048  
       2020-07-09 09:39:18 +08:00
    看这里 /t/686506
    Mutoo
        20
    Mutoo  
       2020-07-09 09:39:23 +08:00
    不同的游戏,后端区别也很大,MMORPG 跟棋牌游戏就是两种极端,FPS 、格斗游戏又是另一番天地。
    业务方面有游戏服务器管理、大厅、匹配、任务、活动、公会、玩家、升级、道具、交易、聊天、抽奖等等系统。
    实时性要求高的游戏,后端要处理数据同步问题、断线重连问题。
    brader
        21
    brader  
       2020-07-09 09:43:07 +08:00
    @lululau 张口就来?连 HTTPS 通讯,内容都不是 RSA 加密的,只是在握手阶段,用 RSA 加密传输 key,数据传输阶段,用 key 对称加密算法的。
    为什么不使用 RSA 加密内容呢?
    1.加解密性能问题。
    2.RSA 能加密的明文长度是有限制的。

    所以,就算银行在传输内容中使用 RSA 加密,也只是部分敏感明文信息使用 RSA,而不可能所有明文使用 RSA
    xuanbg
        22
    xuanbg  
       2020-07-09 09:52:03 +08:00
    最大的区别就是游戏后端接口大部分只有 action 和 action 对象作为输入参数,而且接口也没有 web 后端那么多。
    zdt3476
        23
    zdt3476  
       2020-07-09 09:58:03 +08:00
    楼上很多人说 http 适合页游是不太对的。正确来说,使用长连接和短链接主要区别是这个游戏是弱联网游戏。很多页游也是需要长连接的。比如很多微信小游戏,只有获取排行榜之类的模块的时候需要请求后端服务器,这种使用 http 就够了。有些页游需要实时对战同步战斗数据的,这种也是需要长连接的。
    hantsy
        24
    hantsy  
       2020-07-09 10:02:46 +08:00
    游戏也有走 HTTP 的。
    594duck
        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 的钱也就是一组传奇一个月回本,你要把眼界放宽点“

    大哥,我请你吃饭吧。你们这水平要求高么。钱多么。。。
    594duck
        26
    594duck  
       2020-07-09 10:11:59 +08:00
    游戏公司在 13 年还不是 LOW B 的时候,那时候游戏公司爽啊。

    某游戏上线大会,就是一办公室里坐满了人,什么客服,运维,程序,产品经理,数值经理全在里边。

    会议桌上放着一堆钱,用罩子罩着

    上线一周疯狂加班,上线后一周疯狂开服。

    然后上线成功,上线人数稳定,百万注册,几十万在线。老板当场开罩子分钱。那时候爽啊。

    再看现在的互联网老板,扣扣索索,也叫老板。。。真的是。
    594duck
        27
    594duck  
       2020-07-09 10:17:24 +08:00
    @Graves 听说过加密机么?江南天安加密机。就这一个东西,互联网公司就没有多少人知道了。
    lniwn
        28
    lniwn  
       2020-07-09 10:29:46 +08:00   1
    除了上面很多人已经提到的,还有一点,是业务开发层面的区别,游戏服务器是逻辑帧驱动,考核指标是多少毫秒内要执行完一帧,但是 web 服务器是事件驱动的,有 request 就触发执行逻辑。
    不管有没有 client 在链接,游戏服务器都是按照时间一帧一帧来执行的,但是对于 web 服务器,如果没有 client,那服务端就不会执行任何逻辑了(定时或者延时任务之类的除外)。
    fireleaves
        29
    fireleaves  
       2020-07-09 10:35:49 +08:00 via Android   2
    游戏行业 MMORPG 后端,基本没有做过 Web 后端。

    网络通讯确实是长连接,有自己的网络库,基于 epoll 封装,MMO 还可以是 TCP,至于 MOBA 就只能是 UDP 了。通讯数据格式用 protobuf 。
    实时性要求相对较高,目前所在的项目,服务器是 10 帧,现在测试的话一般一条协议或者一个 tick 超过 100ms 就要有警告了。
    业务比较复杂,耦合度比较高,里边各种养成,例如装备,锻造,宠物,伙伴等,各种玩法,各种场景切换。这一部分基本是体力活。
    服务端压力较大,同场景人数,移动,技能要给视野内玩家广播,同一刻消息数量大,性能差会限制玩法的实现,例如多人战斗的玩法。这部分基本可以看作 MMO 核心。
    网关是项目组自己实现的。没有用 Redis,直连 MySQL,一个服一个库,服里人数有上限,所以还 OK,业务对内存操作,落地到库走一个自己的中间件。当然也有很多项目用 Redis,前几天有个项目分享了用阿里云 Redis 集群的踩坑经历。
    加班就一句,12 点下班要偷偷摸摸的,周六不来要请假,当然基本没有不来的。

    不知道转行互联网容易不
    edk24
        30
    edk24  
       2020-07-09 10:51:07 +08:00
    看你是做哪一种游戏, web 游戏得 ws http(s), 客户端游戏得会 socket udp tcp 加密通信

    没做过游戏, 但从通信协议上来讲应该是这样. 而且游戏服务端一般多是 c++ python 亦或者 java 之类的语言来开发, 要么追求极致的性能把服务器压榨干净, 要么是开发比较容易
    sadfQED2
        31
    sadfQED2  
       2020-07-09 19:12:28 +08:00 via Android
    @fireleaves 我旁边就是完美世界跳出来的同事,他表示加班属实
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1084 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 31ms UTC 18:06 PVG 02:06 LAX 11:06 JFK 14:06
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86