V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
yoke123
V2EX  ›  程序员

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

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

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

    顺便 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   ❤️ 1
    游戏行业 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   ·   实用小工具   ·   2888 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 15:03 · PVG 23:03 · LAX 07:03 · JFK 10:03
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.