• 云风的 BLOG

    blog.codingnow.com

    思绪来得快去得也快,偶尔会在这里停留

    订阅 3订阅

  • skynet 1.4.0

    2020年10月20日

    又是一年过去了,skynet 目前保持着一年一个发布版的开发进度。skynet 1.4.0 发布版将于近期冻结。 这次的主要更新是将 Lua 更新到了 5.4.2 (尚未发布,但 github 仓库中的版本号已经到了 5.4.2 )。可能会让 skynet 的许多项目享受到分代 gc 的好处。如果使用大量 agent 服务的模式,将会降低整体的内存峰值开销(GC 更...

  • cache server 问题总结

    2020年10月18日

    这周,我们的 cache server 服务面临了很多的挑战。项目资源超过了 30G ,有几十个用户在同时使用。每天都有版本切换工作(导致重新上传下载 30G 的数据)。在这个过程中,我对 cache server 程序修修补补,终于没有太大的问题了。 总结一下,我认为 cache server 的协议设计,以及 Unity 客户端实现,均存在很大的问题。...

  • skynet 版的 cache server 引出的一点改进

    2020年09月21日

    我们自己做的 cache server 已经工作了很长时间了。上次出问题是在 2 月在家工作期间。 这个月又出了一起事故,依旧是 OOM 导致的崩溃。一开始,我百思不得其解,感觉上次已经处理完了所有极限情况,按道理,这是个重 IO 而轻内存的业务,不太可能出现 OOM 的。 通过增加一些 log 以及事后的分析,我才理解了问题。并对应...

  • 为 skynet 增加并行多请求的功能

    2020年09月03日

    skynet 在设计时,就拒绝使用 callback 的形式来实现请求回应模式。我认为,callback 会导致业务中回应的流程和请求的流程割裂到两个执行序上,这不利于实现复杂的业务逻辑。尤其是对异常的支持不好。 所以,在 skynet 中发起请求时,当前执行序是阻塞的,一直等到远端回应,再继续在同一个执行序上延续。 如果依次发起请...

  • 银河竞逐的设计

    2020年08月19日

    银河竞逐 RFTG 是我最喜欢的桌游之一。我认为直到今天,它仍旧是最棒的引擎建造类卡牌游戏。最近,我看了银河竞逐的作者 Tom Lehmann 在 GDC2018 上的演讲 非常有收获,所以写这篇 Blog 分享一下。 策略竞争类的游戏一定要设计多种结束条件。RFTG 的基础版设计了建造出 12+ 张卡结束和分完 12n 个 VP 结束。基础策略就可区...

  • Evidence-based software engineering

    2020年08月04日

    《The New C Standard》 是我很喜欢的一本书。因为这本书,我有幸结识了作者 Derek M Jones 。 在 2018 年的时候,他就写 email 给我介绍了他正在写的一本关于软件工程的书。 这是一本非常特别的书。里面有大量的、从公开渠道获得的关于软件工程方面的数据。作者对这些数据做了统计和分析。我之前从未看过如此全篇基于数...

  • 裁剪和空间管理

    2020年07月21日

    今天想谈谈游戏引擎中 Culling 模块。 当场景中的可渲染对象很多,而当前会被渲染的对象相较甚少的时候,我们通常会启用一个 culling 的过程。Culling 会想办法剔除一些当前不必渲染的对象,避免这些对象提交到 GPU ,让 GPU 承担剔除的过程。这样可以减少 CPU 到 GPU 的带宽。 最基本的 Culling 是用相机的视锥体和对象...

  • 动态字模的管理

    2020年07月16日

    在上一篇 blog 中,我谈到了 UI 模块。而 UI 模块中绕不开的一个问题就是怎么实现文字渲染。 和西方文字不同,汉字的数量多达数万。想把所有文字的字模一次性烘培到贴图上未尝不可,但略显浪费。如果游戏只是用有限几种字体倒也不失一种简单明了的方法。但如果使用字体丰富,而多数字体只使用几个汉字,那么就不太妥当了。...

  • 游戏 UI 模块的选择

    2020年07月09日

    在游戏(包括引擎)开发的过程中,谈及 UI 模块,通常所指有二: 开发工具所用到的 UI 。 游戏本身所用到的 UI 。 这两者很多时候都是共用的一个模块,比如之前的 Unity 就直接把引擎开发用的 UI 模块扔给开发者开发游戏使用。但很快,开发者就发现,适合工具开发的 UI 模块,在做游戏时就不那么顺手了。所以就有了第三方...

  • skynet 并发模型的一点改进思路

    2020年06月16日

    skynet 的内核是一个多线程的消息分发器。每个服务有一个消息队列,任何服务都可以向其它任意服务的消息队列投递消息,而每个服务只可以读自己的消息队列,并处理其中的消息。 目前的工作原理是,在任意消息队列不为空的那一刻,将该消息队列关联的服务对象放在一个全局队列中。框架启动固定数量的工作线程,每个工作线程...

  • 仅显示最近10篇文章