跳转至内容
  • 欢迎
  • 版块
  • 最新
  • 标签
  • 热门
  • 用户
  • 群组
皮肤
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • 默认(不使用皮肤)
  • 不使用皮肤
折叠
品牌标识

Hellclient 社区

  1. 主页
  2. Mud客户端倒腾
  3. Hellclient.net重建记录

Hellclient.net重建记录

已定时 已固定 已锁定 已移动 Mud客户端倒腾
8 帖子 1 发布者 244 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
回复
  • 在新帖中回复
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • jarlyynJ 离线
    jarlyynJ 离线
    jarlyyn
    写于 最后由 编辑
    #1

    重写的原因之前已经说过了,主要是golang的v8库的问题

    当然,既然重写,也肯定要把代码重新组织一遍。

    目前看go版本的代码有点过于混杂,不够清晰,不方便测试和扩展。

    第一步是拆分项目,目前项目拆分为4个部分

    • Hellclient主体,主要是实现CLI/WebUI,以后可能会加入jiyuAvaionia的gui
    • Hellclient.Core 总体调度,就是hellclient版本的genesis,titan和prophet部分
    • Hellclient.World 单个游戏连接部分
    • Hellclient.V8SriptEngine 不同的引擎。在构架上,引擎在World层之上,提供一个接口注入回World。这里还在考虑是否有更不脏的方法。
    1 条回复 最后回复
    • jarlyynJ 离线
      jarlyynJ 离线
      jarlyyn
      写于 最后由 编辑
      #2

      此外.net版本还会尝试 精细的经常控制。

      go 版本过于然用go协程,然后锁控制,后期有点失控。

      1 条回复 最后回复
      • jarlyynJ 离线
        jarlyynJ 离线
        jarlyyn
        写于 最后由 编辑
        #3

        先把代码总体架构给组织理顺了。

        之前的代码走的按功能按组件划分。现在将每个模块分了3个层,按层整理代码。

        这样的优点是有测试的可能。hellclient本身因为都是散布的组建,其实很难做分块的测试。

        同时找代码也更方便一点。

        毕竟hellclient是从0开始长起来的,互相之间的依赖肯定更重。

        hellclient.net是重构项目,能花时间考虑怎么组织和布局。

        1 条回复 最后回复
        • jarlyynJ 离线
          jarlyynJ 离线
          jarlyyn
          编写于 最后由 编辑
          #4

          在目前的原型代码里测试了下,再对c#进行了一些调研。

          只能说,没有银弹。

          c#里还是只能用 lock/SemaphoreSlim的锁,或者ActionBlock的类Channel方法来处理数据竞争。

          想象也是,go这种从以发明就走并发路线语言,没道理不用最优的方案的。

          当然,既然是重构,本身这个问题还是有能改善的。

          就是把我hellclient代码里在不同组件里各司其职的多个锁,优化一个World一个统一锁,然后再可能引起并发的入口函数处统一加锁,不要锁满世界乱飞。

          1 条回复 最后回复
          • jarlyynJ 离线
            jarlyynJ 离线
            jarlyyn
            编写于 最后由 编辑
            #5

            然后一些关于锁的优化的细节。

            这两天把 自动机部分重做了,有点累倒了。休息下想象关于锁竞争的问题。

            之前做hellclient时考虑的是脱耦,隔离,每个组件通过总线进行通信。所以锁是基于数据的,内部(私有)访问不加锁,总线(公开)访问加锁。

            这次准备把锁加到入口。

            也就是在发起调用的位置加锁,一次只允许一次调用加锁。数据本身保持无锁。

            根据实际的内部访问复杂度,感觉这种调度更合理点。

            1 条回复 最后回复
            • jarlyynJ 离线
              jarlyynJ 离线
              jarlyyn
              编写于 最后由 编辑
              #6

              目前已经把基本工作做完,开始嵌入v8的工作。

              然后发现比较蛋疼的地方。

              嵌入v8后,主程序大概22mb,v8的so大概57mb,可以upx到35m左右,也就是一个操作系统大概是 60mb左右。

              对比hellclient go版本是30多mb/13mb(upx后)一个版本。

              有点夸张。

              1 条回复 最后回复
              • jarlyynJ 离线
                jarlyynJ 离线
                jarlyyn
                编写于 最后由 编辑
                #7

                好消息:clearscript对接很快,主体功能已经进入王东伟,机器能正常跑。
                坏消息:开了clearscript,没法开裁剪了,项目进一步膨胀到了50多m+50多m。

                只能说,clearscript还是上个jit时代的产品。很强,但在很多场景下,不是那么合适。

                1 条回复 最后回复
                • jarlyynJ 离线
                  jarlyynJ 离线
                  jarlyyn
                  编写于 最后由 编辑
                  #8

                  脚本基本跑通了。 还是稳定性和内存泄漏测试。

                  整理了下构架

                  https://github.com/jarlyyn/hellclient.net/blob/main/architecture/index.md

                  1 条回复 最后回复
                  回复
                  • 在新帖中回复
                  登录后回复
                  • 从旧到新
                  • 从新到旧
                  • 最多赞同


                  • 登录

                  • 没有帐号? 注册

                  • 登录或注册以进行搜索。
                  Powered by Herbrhythm.
                  • 第一个帖子
                    最后一个帖子
                  0
                  • 欢迎
                  • 版块
                  • 最新
                  • 标签
                  • 热门
                  • 用户
                  • 群组