【发布时间】:2020-07-24 10:20:02
【问题描述】:
我已经看到多个资源之间可能存在依赖关系。因此resource1 使用resource2 的功能。资源之间的通信是如何进行的?
什么时候应该将不同资源中的脚本分开?为整个游戏模式坚持一个资源还是将其拆分更好?
干杯
【问题讨论】:
标签: separation-of-concerns altv
我已经看到多个资源之间可能存在依赖关系。因此resource1 使用resource2 的功能。资源之间的通信是如何进行的?
什么时候应该将不同资源中的脚本分开?为整个游戏模式坚持一个资源还是将其拆分更好?
干杯
【问题讨论】:
标签: separation-of-concerns altv
服务器端
每个资源都是相互隔离的。资源使用 cpp-sdk 进行通信。隔离取决于脚本运行时。一些运行时如 c# 支持在资源之间共享内存,而 nodejs 不支持在不同线程上运行的资源之间共享内存。 您总是必须明确地告诉运行时您想要向其他资源公开哪些函数和数据。 这意味着在调用函数或访问数据时,您的运行时开销很小,因为通信数据需要序列化到非托管 cpp 内存,然后再返回到其他资源的内存。 当运行时支持共享相同的内存时,这种开销不会发生在具有相同类型的资源之间。 坚持使用单个资源时,您没有运行时开销,但无法单独交换资源。
客户端
它与服务器端基本相同,只是目前只有一个不支持在资源之间共享内存的 v8 javascript 模块。 对于客户端而言,调用其他资源的开销很可能不如服务器端那么重要。特别是当您想减少服务器主线程必须执行的 CPU 密集型任务时。对于客户端的多个资源,还可以减少客户端必须下载的数据量,因为当您更改资源中的某些内容时,客户端必须重新下载整个资源。
tl;dr
服务器端
当性能最重要时,服务器端最关注单一资源。当您需要不时更换资源时,请使用多个资源。
客户端
当您使用其他人的资源或想要拥有模块化资源时,请使用多种资源。将您的资产(模组、图片等)拆分到尽可能多的资源中,这是有意义的,以减少发生变化时的数据下载。
【讨论】: