V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
太吾绘卷
HolmLoh
V2EX  ›  太吾绘卷

冲浪在 NGA 上看到一个有关太吾正式版技术架构的贴

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

    首先我没做过游戏,根据我非常有限的了解单机不是应该可以单个程序就解决了,如果是因为开发便利前后端分离进程间不是还有很多方法通信吗,为什么要通过网络端口通信,好像说这还导致了很多用户因为端口占用启动不了。帖子还有人说主创招了群三流码农高开低走。总之心情复杂

    24 条回复    2022-09-27 12:38:54 +08:00
    wwwz
        1
    wwwz  
       64 天前
    方便做联机?端口占用不是很好解决吗
    mainjzb
        2
    mainjzb  
       64 天前
    客户端大概率用 C++写的
    服务端可以用 Go 生产力提高 10 倍
    HolmLoh
        3
    HolmLoh  
    OP
       64 天前 via iPhone
    @wwwz 只是通过网络端口通信这一点来看,因为种感觉这不应该是单机游戏开发的常规操作
    renmu
        4
    renmu  
       64 天前 via Android   ❤️ 3
    用接口做通信不也是进程间通信的一种,也可以为联机做预留
    lookStupiToForce
        5
    lookStupiToForce  
       64 天前   ❤️ 2
    多少有点少见多怪的感觉
    人家饥荒当年因为单机游戏底层架构,压根没法联机,主创团队后来重写底层才搞出来联机版
    太吾茄子说要支持创意工坊,而玩家最可能搞得 mod 除了**、功法、剧情,不就是联机了吗?修仙模拟器的联机 mod 见过没?这有啥不好理解的
    beimenjun
        6
    beimenjun  
       64 天前   ❤️ 2
    咋不想着下一步改成支持多人联机就想着改成网游赚钱呢?

    而且自己写的东西,弄成网游赚钱,只要是符合自己预期的作品,作者怎么整都可以。

    个人觉得,游戏的技术架构其实是非 MOD 制作人的玩家不太需要关注的东西。了解越多只会丧失游戏的现实隔绝性。
    HolmLoh
        7
    HolmLoh  
    OP
       64 天前 via iPhone
    @renmu
    @lookStupiToForce
    为联机准备好像确实有道理,虽然没有看到多人的感觉,也许确实是我少见多怪了
    ziseyinzi
        8
    ziseyinzi  
       64 天前
    就是为了以后支持联机呗。不知道它这个后端是什么写的,前端应该是 Unity(C#)。
    wdwwtzy
        9
    wdwwtzy  
       64 天前
    @mainjzb 客户端是 unity
    Torpedo
        10
    Torpedo  
       64 天前
    这年头哪个单机没点联网能力。。。

    不过要是因为端口占用启动不了,那确实菜
    xylxAdai
        11
    xylxAdai  
       64 天前
    进程间通信用 socket 感觉没啥问题啊,而且进程隔离防止修改也挺多这样的操作,不过估计是为下一步做联机吧,挺好的。关注这些没意义,游戏好玩就行。
    rrfeng
        12
    rrfeng  
       64 天前
    喷架构的都是瞎喷。

    写死端口导致可能启动不了确实是设计问题,可能开发水平也就这样了。有一万种办法不出现这个问题。
    HolmLoh
        13
    HolmLoh  
    OP
       64 天前 via iPhone
    @rrfeng 算是低级 bug 了,应该是忘了改了吧
    HolmLoh
        14
    HolmLoh  
    OP
       64 天前 via iPhone
    @xylxAdai 确实好玩就行,主要是这游戏一路走来不容易,实在是让人担心
    BeginInvoke
        15
    BeginInvoke  
       64 天前   ❤️ 1
    用 socket 实现进程间通信没啥问题啊,据我了解除此之外还可用管道,管道的话用起来还不如 socket 可靠
    tool2d
        16
    tool2d  
       64 天前   ❤️ 1
    我的程序也是 socket 通讯,因为界面是浏览器,用的是 websocket 。

    没什么问题,很适合混合语种编程的架构。
    jim9606
        17
    jim9606  
       64 天前 via Android   ❤️ 4
    这种设计进可以做联机和 p2p 独服,退可以像这样独立进程跑单机。这种设计得在项目初期就定好,后期没法改的。要是不这么设计到后面想加联机玩法就很困难了。
    socket 做 ipc 的优势是分布式,这样网游 /独服的服务器就可以不带游戏引擎了。而且 socket 实现很好做到平台&语言无关,其他 ipc 或多或少有些限制。
    NGA 果然是个奇葩论坛。
    HolmLoh
        18
    HolmLoh  
    OP
       64 天前
    @jim9606 #17 这下真是外行指导内行了
    BeginInvoke
        19
    BeginInvoke  
       64 天前   ❤️ 2
    哦对了刚查了一下走 loaclhost 数据甚至不经过网卡,纯纯内存缓冲区拿数据,所以采用 socket 根本不可能导致性能瓶颈
    HolmLoh
        20
    HolmLoh  
    OP
       64 天前
    @BeginInvoke #19 我也学习一下,这么说来这种方式是没有任何问题
    voidemoer
        21
    voidemoer  
       64 天前
    不提技术,正式版的战斗机制改的,就挺适合联机的,倒是挺希望能和朋友 1v1 的
    YUyu101
        22
    YUyu101  
       64 天前
    联机用吧,需要玩家当主机的话,就需要这种架构
    ysc3839
        23
    ysc3839  
       61 天前 via Android
    很多支持联网的游戏的单人模式都是跑个本地服务器的,不过大多是弄成单进程的。只能说开发者偷懒没有处理内部通信的事情。
    kice
        24
    kice  
       60 天前 via Android   ❤️ 1
    首先单机游戏做成 CS 架构没啥问题,隔壁 V 社的起源引擎和 MC 也是 CS 架构走 RPC (起源为了减少延迟,单机模式下开后门,不走 localhost 那边的 memcpy )。

    其次 50000+端口基本上属于很难被其他程序使用。估计程序员比较菜?写死了估计还没想到办法端口号变动之后怎么连服务器。

    走网络通讯是最简单最方便的 RPC 途径,其他的各种方法都不好移植,例如命名管道,mmap 之类。甚至可能是 HTTP 或者 HTTP over UDP 也是可行。

    我个人认为最蠢的地方是服务器逻辑单独一个进程进行处理。虽然知道是因为 unity ,但是如果我来做的话会尝试把服务器逻辑做成一个 C 井库,客户端既可以给玩家用,也可以本地开服务器局域网联机;然后再额外做一个没有渲染或者没有客户端逻辑的独服给公网(社区服)用。这样方案下,mod 环境某种意义上比较成熟( bepinex 之类的框架大家都会用)。

    单独服务器进程之下,mod api 就可以随意发挥,脱离 bepinex 之类的 mod 框架。缺点可能就是如果要修改素材,渲染方面,还是要用 bepinex ,然后服务器那边也要单独一个 mod ;虽然能避免,但是个人就比较怀疑团队那边有没有能力设计且实现好这个大饼。
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2751 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 37ms · UTC 11:33 · PVG 19:33 · LAX 03:33 · JFK 06:33
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.