# 模块成本

> Understand the pricing model and free tier for Cloud Code modules.

Cloud Code 有一个免费套餐，因此您可以免费开始开发和使用。仅当您的组织扩展到超出免费套餐或任何适用的信用额度时，您才需要开始付费。

您可以在 [UGS 产品定价概述页面](https://unity.com/solutions/gaming-services/pricing)上找到更多详细信息和定价常见问题解答。

## Cloud Code 与 Unity 服务结合使用##using-cloud-code-with-unity-services

将 Cloud Code 与 Unity 服务结合使用时，您需要为所使用的服务支付费用。例如，如果您从 Cloud Code 调用 Cloud Save 服务，那么对于 Cloud Save 调用和 Cloud Code 调用，都需要付费。

如需了解更多信息，请参阅 [Unity 服务定价](https://unity.com/solutions/gaming-services/pricing)页面。

## 使用推送消息##using-push-messages

使用 Cloud Code WebSocket 功能将消息推送到客户端时，需要特别注意网络带宽使用量和相关成本。

### 出口流量成本##egress-costs

从模块发送到客户端的每条消息都会占用网络带宽，这会影响模块的出站数据总量。Cloud Code 会将通过 WebSocket 连接推送消息的相关网络带宽使用量计入到 Cloud Code 出口流量成本中。

在设计应用程序并决定发送消息的时间和频率时，请务必考虑出口流量成本。过多或不必要的大型消息可能会导致更高的出口流量成本。

如需详细了解 Cloud Code 定价，请参阅[成本](./cost.md)页面。

### 消息大小限制##message-size-limit

Cloud Code 将通过 WebSocket 连接发送的消息大小限制为 10 KB。这意味着您需要管理发送的数据的大小，尤其是对于更复杂或数据密集型的应用程序。

您可以使用以下方法来确保让玩家了解最新情况，并保持较低的成本和网络带宽使用量：

| 缓解措施               | 使用条件                                      | 实现方式                                                        |
| ------------------ | ----------------------------------------- | ----------------------------------------------------------- |
| 发送数据的差异。           | 您需要传送大量数据或游戏状态的重大变化。                      | 发送数据的差异而不是整个有效负载。差异是指应用于现有状态的一组更改，通常比完整状态数据小得多。             |
| 提示发出 HTTP 请求来获取数据。 | 完整数据集很大且只需要不频繁的更新，或者通过 HTTP 获取数据会更有效或更经济。 | 使用 WebSocket 消息作为微移机制来通知客户端有新数据可用，并提示客户端发出 HTTP 请求以获取完整数据集。 |

## Cloud Code 成本##cloud-code-cost

成本按三个类别计算：

| 类别    | 描述                                                                             |
| ----- | ------------------------------------------------------------------------------ |
| 调用次数  | 调用次数会统计组织内成功的 Cloud Code 模块函数执行请求数量。成功执行的请求会从模块返回带有 HTTP 200 状态代码的响应。          |
| 计算小时数 | 计算小时数是指组织内执行 Cloud Code 模块函数所花费的时间。执行时间还可能包括额外的预热时间。                           |
| 出口流量  | 出口流量衡量组织内成功执行 Cloud Code 模块函数的响应大小（以 GB 为单位）。成功执行的请求会从模块返回带有 HTTP 200 状态代码的响应。 |

### 关于节省成本的提示信息##cost-saving-tips

要降低使用 Cloud Code 的成本，请按照以下提示信息操作：

* 确保模块函数响应中仅包含您使用的数据。模块函数响应中包含未使用的数据仍会增加出口流量成本。
* 确保您的 Cloud Code 模块函数在分配的 15 秒超时周期内完成。意外的 `while(true)` 循环可能会产生意想不到的成本。
* 考虑是否可以一起批量执行。例如，Cloud Code 模块函数 `FuncExampleB` 可能依赖于 `FuncExampleA` 的响应。单独调用这些函数与将两者的逻辑合并到一个模块函数请求中相比，成本可能会增加一倍。

### 命令批处理##command-batching

根据命令批处理的概念，每个游戏操作都是一个命令，您可以将命令集合到队列中并批量发送到服务器进行处理。如需了解更多信息，请参阅[命令批处理](/services/solutions/command-batching.md)页面。

例如，一个游戏在每个操作后分配奖励：调用 `Cloud Save` 来分配玩家经验值，调用 `Economy` 来分配游戏币。玩家完成以下三个操作：

* 第一个操作会产生 100 经验值和 10 个游戏币。
* 第二个操作会产生 50 经验值和 5 个游戏币。
* 第三个操作会产生 200 经验值和 30 个游戏币。

如果独立执行这三个操作，则至少会调用六次各种 Unity 服务（在本例中为 Cloud Save 和 Economy）。但是，您可以将所有这三个操作存储为批处理命令，并通过单个 Cloud Code 模块函数请求来进行处理。这意味着您的游戏只需调用两次 Unity 服务：一次调用 Cloud Save 以增加 350 经验值，另一次调用 Economy 以增加 45 个游戏币。
