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

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

  •  
  •   DexLee · 38 天前 · 3594 次点击
    这是一个创建于 38 天前的主题,其中的信息可能已经有所发展或是发生改变。

    好奇,所以来了解一下

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

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

    先问是不是,再问为什么
    zxjxzj9
        23
    zxjxzj9  
       37 天前
    lua 一般是作为热更的脚本使用,是跑逻辑的部分,一般来说搭配 lua 的是底下的 C++服务器。但是目前的情况来说,只要你这个游戏没有 pvp 联机内容(甚至有点弱联机也无所谓),那么根本不会有人想用 c++写后端,自找没趣。用 TS python GO 甚至 java 都是可以的。没有 C++自然也不会有 lua 了
    BALDOOR
        24
    BALDOOR  
       37 天前
    应该是 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
       37 天前
    @BALDOOR
    感谢大佬的分享

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

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

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