V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
DexLee
V2EX  ›  程序员

游戏服务器开发中,lua 的痛点有什么,为什么选择 Python 或者 go 呢?

  •  
  •   DexLee · 4 天前 · 3134 次点击

    好奇,所以来了解一下

    第 1 条附言  ·  4 天前
    确实我的表述不够清晰,lua 本身没有痛点,痛点是它和其他工具结合所产生的.
    我所疑惑有以下几个方面
    1.为什么大厂逐渐使用 go 或者 python 作为游戏业务逻辑的开发语言
    2.lua 的 table 如果存进 mongodb 中,数字不能作为 key 的问题是怎么处理的
    26 条回复    2025-07-29 16:43:39 +08:00
    lizhenda
        1
    lizhenda  
       4 天前
    lua 好用,只是不更新了,不过依然是首选的呀。
    maocat
        2
    maocat  
       4 天前
    lua 的痛点就是他的数组下标起始位是 1
    DexLee
        3
    DexLee  
    OP
       4 天前
    @lizhenda 最新好像都是 5.5 版本了
    GeruzoniAnsasu
        4
    GeruzoniAnsasu  
       4 天前
    抽象能力很弱,所有逻辑得用字符串拼接和 table 来实现。虽说 table 很万能,但这个数据结构本身就是非常原始的。宿主得提供足够多足够强大的接口,让 lua 只写循环、判断、匹配,那就还算舒服。
    crackidz
        5
    crackidz  
       4 天前
    缺点太多了吧,现在很多已经在用 TypeScript 了,甚至用 C#也不错啊
    guanzhangzhang
        6
    guanzhangzhang  
       4 天前
    没有自带类,需要写法才能实现
    Dorathea
        7
    Dorathea  
       4 天前
    感觉问题是不是偏了?
    你的问题有假设 Lua 有痛点, 但实际上或许是使用场景的不同(所有语言都有痛点, 只是场景是否适合)
    Lua 在游戏服务器中, 我接触到的:
    * 将 Lua 和 C/C++ 结合, 快速实现业务需求
    * 一个单纯的工具语言
    * 纯 Lua 的游戏服务器
    作为 1, 2 项, Lua 是合格的, 第三个出现的频率相当低, 某种意义上就不该这么用

    没有自带类, 抽象能力弱, 等等...
    这些我认为本来就不是 Lua 这个脚本语言的目标, 如果有这些需求, 我不会去用 Lua, 其他语言可以实现得更好
    或者说实际上语言发展到现在, 太卷了, 那些 Lua 没有的 feature 并不是 Lua 不努力, 不好
    donaldturinglee
        8
    donaldturinglee  
       4 天前 via Android
    单 lua 拿出来对比 py 和 go 不行吧。实际上 lua 可能还是做一些需要热更新的场景然后集成到 c++/c 里面
    geekvcn
        9
    geekvcn  
       4 天前
    lua 世界最大的开源社区是魔兽世界插件,这就是最大的痛点。然后才是嵌入式和各种游戏引擎脚本,游戏服务器脚本
    yplam
        10
    yplam  
       4 天前 via Android
    主要是轻量高性能,以及历史原因吧,新项目感觉可以选 wasm
    feixiangcode
        11
    feixiangcode  
       4 天前
    lua 这门语言,写个小脚本问题不大,要是需要几个人十几个相互配合的项目,还是挺难的。
    LanLiang
        12
    LanLiang  
       4 天前
    lua 一般是在游戏服务器中作为动态脚本使用
    DOLLOR
        13
    DOLLOR  
       4 天前
    如果一定要选 lua ,我也会选择 TypeScriptToLua🐶
    sunny352787
        14
    sunny352787  
       4 天前
    你预设的问题不对,不是 lua 被 python 或者 go 替换了,而是 C/C++被 python 和 go 替换了,lua 在服务端只是作为嵌入式脚本写逻辑,本身并不能搭建完整的服务端,至少没见过人纯用 lua 实现服务端的。
    nevermoreluo
        15
    nevermoreluo  
       4 天前
    弱弱的问下,哪里或者说业界大厂谁选 py 了。。。。
    xuhuanzy
        16
    xuhuanzy  
       4 天前
    @lizhenda 前两周刚更了 lua5.5, 只是维护慢不是没人维护
    Immortal
        17
    Immortal  
       4 天前
    问的没有上下文其实挺难回答.
    之前在游戏公司客户端和服务端用的都是 Lua,也运行得很好.
    DexLee
        18
    DexLee  
    OP
       4 天前
    @nevermoreluo 貌似网易 python 多,腾讯 go 多
    bronyakaka
        19
    bronyakaka  
       4 天前
    @nevermoreluo 都是引擎的脚本
    nevermoreluo
        20
    nevermoreluo  
       3 天前
    @bronyakaka 我知道引擎的脚本,但是 py 的 binding 实现比 lua 的开销高吧,lua 嵌入已经有很大的基础了,感觉 py 没那么大的优势,不过往 ai 靠的话也不好说?
    所以我才问有谁家这么搞了,比较好奇。
    bronyakaka
        21
    bronyakaka  
       3 天前
    @nevermoreluo #20 网易自研引擎的脚本是 py
    julyclyde
        22
    julyclyde  
       3 天前
    我同意 @Dorathea 的看法
    “你假定……”

    先问是不是,再问为什么
    zxjxzj9
        23
    zxjxzj9  
       3 天前
    lua 一般是作为热更的脚本使用,是跑逻辑的部分,一般来说搭配 lua 的是底下的 C++服务器。但是目前的情况来说,只要你这个游戏没有 pvp 联机内容(甚至有点弱联机也无所谓),那么根本不会有人想用 c++写后端,自找没趣。用 TS python GO 甚至 java 都是可以的。没有 C++自然也不会有 lua 了
    BALDOOR
        24
    BALDOOR  
       3 天前
    应该是 c++写纯业务不够快,或者编译慢,人员水平参差不齐,容易出问题之类的,还有以前前端也用 lua 热更的原因吧

    我在业务层没写过 c++😂,我写过纯 Rust 觉得没啥问题,当然我是 16 年就开始用 rust 的“老人”

    现在 lua 只有一些老人坚守或者维护老项目用,新项目几乎要么 go 或者 java ,还有可以前后端通用的 ts/c#,也挺不错的

    腾讯以前纯 c++,现在 go 多
    网易前后端都是 py
    例如三七之类的一些是 Java
    阿里那个用 c++和 lua
    43 用 erlang
    PHP/NodeJS 就一大堆了,都是小厂,做轻型/小游戏之类的
    c#好像没怎么听说过,初创小公司倒是听过一大堆的,都是写 unity 的没有服务器积累经验,网上找一些开源的直接糊上去,c#开发效率和性能都挺优秀的,我问过以前的老人说他们 0 几年的时候用过.Net ,后来都转 java 了,貌似互联网那边用得也不算多,不怎么待见,不知道为毛,期待 c#的再次爆发

    我现在用 Typescript+Rust ,学习速度开发效率和性能全拉爆,街上随便拉条狗过来都能写,爽飞了
    现在游戏这边技术或者生态都逐渐向互联网靠拢,开发效率和体验都挺不错的,远远甩开以前各家定制的屎山

    如果你不是规则的定制者,那么写什么你也左右不了,还不如加入一家好公司,福利好,好项目,来钱快
    如果你是规则的定制者,我建议就是纯 c#或者 typescript+Rust 路线,小到初创,大到宇宙厂,所有需求都能 100%满足
    DexLee
        25
    DexLee  
    OP
       3 天前
    @BALDOOR
    感谢大佬的分享

    我还有 2 个问题想请教:
    采用 go 的话,是底层和业务都采用 go 来实现吗?
    写业务的话,为什么采用 go 不采用 lua 了呢?
    BALDOOR
        26
    BALDOOR  
       3 天前
    @DexLee
    18 年那时候用 go 的好像有人会搭配 lua(写业务),其实就是为了热更
    现在的话,用 go 的一般是底层架构和上层业务全部用 go
    至于为什么不搭配 lua ,游戏服务器技术各种语言/框架/解决方案都有,用什么,要看各家技术人员的喜好吧

    go 写业务其实也还好,我曾经给别的团队帮忙的时候写过,虽然我没学过 go ,但也没啥不适应之类的

    lua 做简易脚本是一把好手,现在有 typescript 了(有众多好爹撑腰就是牛逼),现在新项目上,用 lua 确实不应该了,性能,开发效率,和框架全部都是过去式了,除了不愿意接受新事物且固执的老人留守外,想放弃就放弃吧,时代必然
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   901 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 20:40 · PVG 04:40 · LAX 13:40 · JFK 16:40
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.