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

skynet 和 kbengine 的比较

  •  
  •   gantleman · 2020-10-05 15:18:58 +08:00 · 6756 次点击
    这是一个创建于 1539 天前的主题,其中的信息可能已经有所发展或是发生改变。

    全文地址 zhuanlan.zhihu.com/p/260753536

    技术背景

    skynet 和 kbengine 都是国内知名的分布式游戏服务器引擎。

    在游戏服务器架构转向分布式技术过程中都吸引了大量的游戏公司和程序员。

    这两个引擎的特点是都是分布式结构。所不同的是 skynet 支持线程模式而 kbengine 只支持多进程模式。

    游戏服务器最初大部分都是 C 或 C++开发的。因为游戏服务器对性能要求非常的高。属于 CPU 密集型服务器。

    但 C 或C++最大的问题就是软件崩溃。随着功能的增加,软件的膨胀。导致崩溃的问题越来越难解决。所以崩溃问题严重限制了服务端软件的规模。

    与互联网软件要求不同的是,因为游戏服务器对性能的极高要求。导致了互联网软件可以牺牲部分性能使用 java 来解决崩溃问题。因为解决了崩溃问题互联网服务器规模得以进一步的增加。这部分性能的损失互联网服务器又通过分布式的方法进行了弥补

    游戏服务器虽然有强烈意愿转向分布式以获得更多功能,但大部分公司无力承担分布式架构的高技术成本。因为传统的 java 分布式架构的代价极高。需要大量开发人员进行维护。

    分布式的技术发展路线可以总结如下。由C语言转向脚本语言以避免崩溃问题。没有了崩溃问题就可以引入更多的开发人员。而更多的开发人员和分布式结构抵消了脚本语言带来的性能下降,并带来了更多的功能。更多的功能给公司带来了很好的收益。

    但游戏公司和互联网公司完全不同。游戏属于功能密集型的软件。游戏公司养不起哪么多的开发人员来维护哪么多的分布式功能。互联网公司的一个功能可以好几个开发人员来维护。而游戏公司的一个程序要维护好几个游戏功能。这种差异导致了分布式技术在游戏公司推广困难。

    在这样的背景下诞生了 skynet 和 kbengine 两个比较成功的服务器引擎。

    全文地址 zhuanlan.zhihu.com/p/260753536

    15 条回复    2023-01-03 18:17:31 +08:00
    sryanyuan
        1
    sryanyuan  
       2020-10-12 10:11:04 +08:00
    啥时候 c/c++最大的问题变成崩溃了,感觉像所有 c/c++写的软件都会定期崩溃一样。难道不应该表述成 写出可靠性高的软件要求高,成本高,并且崩溃问题定位解决比较困难
    floyda
        2
    floyda  
       2020-10-12 10:33:39 +08:00
    TDengine 了解一下~
    gantleman
        3
    gantleman  
    OP
       2020-10-12 10:46:32 +08:00
    @sryanyuan 查不出来的崩溃问题,可不就变成了定期崩溃。
    gantleman
        4
    gantleman  
    OP
       2020-10-12 10:46:45 +08:00
    @floyda 广告?
    livepps
        5
    livepps  
       2020-10-12 11:04:54 +08:00
    我们项目用 c++,几百个服,每个服十几个进程,一年所有服务器崩溃的次数加起来,小于 10 次,这个在游戏服务端,还是可以接受的,有稳定的底层框架,在上面做业务功能,除非水平太差,不然很少会出现崩溃的情况。
    gantleman
        6
    gantleman  
    OP
       2020-10-12 12:05:25 +08:00
    @livepps 从统计学的角度看, 一个软件能不能发展成屎山取决于 3 个因素。

    1,功能的数量。
    2,开发人员的数量。
    3,功能和人员变化的频率。

    贵公司的软件没有变成屎山只是因为数量还不够多,频率还不够快。
    jmc891205
        7
    jmc891205  
       2020-10-12 12:24:25 +08:00
    看来用 Rust 另起炉灶在游戏服务器开发领域很有潜力
    floyda
        8
    floyda  
       2020-10-12 21:17:47 +08:00
    Rust 跑得起来就很难崩, 除非你在 unsafe 里面乱搞 (¬◡¬)
    dabaibai
        9
    dabaibai  
       2020-10-16 23:12:23 +08:00 via Android
    服务器自己写安心
    gantleman
        10
    gantleman  
    OP
       2020-10-17 09:32:37 +08:00
    @dabaibai 支持大佬
    pluswu1986
        11
    pluswu1986  
       2020-11-25 09:38:08 +08:00 via Android
    rust 这写逻辑不是失了智嘛
    guyeu
        12
    guyeu  
       2020-12-12 18:13:50 +08:00
    其实不太能理解游戏服务器对性能要求非常高这种结论是怎么来的。。。对客户端来说,绝大多数 RTT 都在网络传输上,无论服务器实现成什么样,也就是响应时间增减几毫秒的问题,当然可能有个别业务特别耗时,但不会影响玩家的整体体验。因此,为啥非得上 C++呢。。。Java+ZGC 可以把暂停时间控制在 10ms 以内,大多数时候不超过 2ms 。。
    gantleman
        13
    gantleman  
    OP
       2020-12-14 10:08:16 +08:00
    @guyeu 你只考虑一个客户端,服务器是几千上万个客户端。角度不同结论不同。
    guyeu
        14
    guyeu  
       2020-12-14 16:42:10 +08:00
    @gantleman emmmm 可能是我没说清楚。“游戏服务器对性能要求非常的高”这种结论一般是横向对比 web 服务器得出的,通常的逻辑链条是:游戏业务延迟敏感+连接数少运算量大 = 性能要求高 --> 要用 C++实现。我想说的是,在客户端的角度,服务器实现成什么样并没有区别,所以,没必要非得上 C++。
    ddonano
        15
    ddonano  
       2023-01-03 18:17:31 +08:00
    @guyeu 目前使用了 quarkus 实现了游戏的消息同步模块,感觉使用良好
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   972 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 19:13 · PVG 03:13 · LAX 11:13 · JFK 14:13
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.