V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Game Engines
Unreal Engine
MyCryENGINE
rv54ntjwfm3ug8
V2EX  ›  游戏开发

网络游戏服务端用什么语言写区别是不是不大? Java /C++/C#哪个用得更多,为什么?

  •  1
     
  •   rv54ntjwfm3ug8 · 2022-03-12 19:12:14 +08:00 · 4712 次点击
    这是一个创建于 992 天前的主题,其中的信息可能已经有所发展或是发生改变。
    24 条回复    2022-03-18 12:59:30 +08:00
    kiracyan
        1
    kiracyan  
       2022-03-12 19:13:20 +08:00
    c++ go
    BrettD
        2
    BrettD  
       2022-03-12 19:14:55 +08:00 via iPhone   ❤️ 2
    C++,游戏服务端业务时延敏感
    paoqi2048
        3
    paoqi2048  
       2022-03-12 19:19:36 +08:00
    主要看项目的技术选型,一般是 C++写底层再搭配一门脚本语言如 Lua/Python ,另外就是 Java 、C#、PHP 、Erlang 和 Go 这种
    whitehack
        4
    whitehack  
       2022-03-12 19:22:59 +08:00
    我们用的 nodejs 和 go
    nightwitch
        5
    nightwitch  
       2022-03-12 19:24:36 +08:00
    和游戏品类有关系。。moba/fps/mmorpg/SLG/消消乐所用的服务器技术差很多
    Kasumi20
        6
    Kasumi20  
       2022-03-12 19:39:54 +08:00
    rv54ntjwfm3ug8
        7
    rv54ntjwfm3ug8  
    OP
       2022-03-12 19:40:50 +08:00
    @Kasumi20 #6 .NET 不是语言,而且我已经写上了 C#了
    newtype0092
        8
    newtype0092  
       2022-03-12 19:49:40 +08:00
    除了上面说的 C++,有些延时不敏感的会用 Java ,比如回合制卡牌、棋牌、益智类小游戏等。
    ragnaroks
        9
    ragnaroks  
       2022-03-12 19:58:01 +08:00
    具体看游戏类型和数值设计,如果是那种战力养成的游戏还真挺吃优化的,像仙境传说老游戏没啥氪金点就可以直接 dotnet+mysql 1c2g 带 50 多人
    forgottencoast
        10
    forgottencoast  
       2022-03-12 21:33:10 +08:00
    @theklf4 哈哈,#6 莫名其妙。
    ly841000
        11
    ly841000  
       2022-03-12 22:06:47 +08:00
    go 不用强行刷存在感吧?哪个著名点的游戏用 go 了?
    magicdawn
        12
    magicdawn  
       2022-03-13 00:46:09 +08:00
    咋没有 rust 啊
    luckyrayyy
        13
    luckyrayyy  
       2022-03-13 02:43:52 +08:00
    ZGC 能做到 TB 级别内存的 stw 时间低于 1ms 了,应该很少有游戏会严苛到这种级别吧?未来会不会有很多游戏后端用 Java ?
    Leviathann
        14
    Leviathann  
       2022-03-13 02:52:43 +08:00
    @luckyrayyy 我认识一人在页游公司,他们用的 jvm 生态,语言是 kotlin 好像还有 akka 框架
    Brian1900
        15
    Brian1900  
       2022-03-13 09:54:43 +08:00
    @magicdawn 还没毕业吧
    magicdawn
        16
    magicdawn  
       2022-03-13 10:33:43 +08:00
    bruce0
        17
    bruce0  
       2022-03-13 12:13:06 +08:00
    以前基本都是 C++,现在的分游戏类型了
    像卡牌(阴阳师),养成类的(暖暖),等对延时不敏感的游戏现在大多数用 go 就可以了, 广州那边很多用 erlang 的,听说还都是用一个框架出来的, 听说过有用 java 的, 但是认识的没有用的

    像 fps, moba, mmorpg 这些, 基本还是 C++, 毕竟对延时很敏感, go 有 GC 还是会有影响的

    像我司, 卡牌都是 go 新开的 fps 用的 C++

    @ly841000 游族的少年三国志 就是 go 写的
    documentzhangx66
        18
    documentzhangx66  
       2022-03-13 15:16:06 +08:00
    其实如果性能允许,能用 Java 、C#、node 、python 、甚至 php 写后台,谁愿意用 C 或 C++。

    很多游戏后台用 C++,那不是优势,而是无奈。
    kimown
        19
    kimown  
       2022-03-13 16:05:41 +08:00 via Android
    @whitehack
    nodejs 是网易的那个吗
    BrettD
        20
    BrettD  
       2022-03-13 17:13:42 +08:00 via iPhone
    @magicdawn 除了 Embark 没见过有什么工作室有用 Rust
    whitehack
        21
    whitehack  
       2022-03-13 19:49:13 +08:00
    @kimown 是的 pomelo 不过我们用的 ts 版 叫 pinus
    tousfun
        22
    tousfun  
       2022-03-13 19:57:00 +08:00 via iPhone
    @whitehack 啥公司
    kimown
        23
    kimown  
       2022-03-13 20:56:11 +08:00 via Android
    @whitehack
    pomelo 用起来简洁又易用
    timethinker
        24
    timethinker  
       2022-03-18 12:59:30 +08:00
    语言用 C++是有优势,但是相比较之下,良好的架构更加重要,要兼顾到日常逻辑开发的便利性,如何权衡取决于公司的用人成本。用 Java 配合 Netty 已经足够承载绝大多数游戏类型了,并且招人也很方便。

    游戏服务端一般是有状态的,而 web 开发大多数是无状态的,有状态就意味着容易出现单点事故,比如网络不可靠,机房出现故障,服务端宕机等等,因此就需要通过日志的方式来存储状态变更操作,尽量减少事故带来的影响。类似于 redis 的 AOF ,mysql 的 binlog 。

    要知道大多数在线游戏后端主要是计算密集型的应用,跟 web 开发的区别之一就在于基本上所有的状态都会保存在进程内存中,目的就是尽量避免 IO 操作。数据库的作用仅仅只是用于存档落地,甚至简单的来讲都可以不要数据库,直接二进制文件也可以。比如我经常在开发调试的过程中将整个玩家对象序列化为一个 JSON 文本,特别方便用于测试的时候,设置各种玩家的快照还原。

    还有很多关于游戏后端开发的知识要点,一次也说不完,比如线程模型,元数据(配置)管理,网络 IO ,二进制消息协议,GM 管理后台,第三方系统集成等等,是一个很庞大的内容。

    值得庆幸的是,随着用户的爆炸增长,现代的服务部署以及运维都比以前要好上太多了,使用云服务和容器成本更低,更有保障,但一切的前提是要根据游戏类型选择合适的技术架构。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1500 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 17:12 · PVG 01:12 · LAX 09:12 · JFK 12:12
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.