文本翻译参考体系结构

在同一游戏会话中,玩家使用不同的母语,可能需要接收原始消息及其翻译版本,这很常见。

本文介绍 GitHub 上的此示例中使用的体系结构。 请注意,此参考体系结构中的代码只是一个指南示例,在用于生产环境之前,可能还有需要优化的地方。

体系结构关系图

T文本翻译参考体系结构

体系结构服务

  • 文本翻译 - 即时将文本翻译成多种语言。
  • Azure 流量管理器 -(可选)根据聊天服务器所在位置导致的延迟将玩家连接到最合适的区域。
  • 事件中心 - 专为实时接收和处理大量事件(在本例中为聊天字符串)而量身定制的服务,以大幅减少或彻底消除管理开销。
  • Azure Function - 可按需运行代码的无服务器计算服务 - 在本用例中,代码将调用不同的认知服务。

体系结构注意事项

您只需创建一个事件中心命名空间,该命名空间将包含分别用于发送和接收消息的 2 个事件中心。

目前,此服务尚不支持所有语言。 请参阅文本翻译 API 的语言和区域支持文档,了解支持的语言和区域。

部署模板

单击下面的按钮,将项目部署到您的 Azure 订阅:

此操作将触发模板部署,即系统会将 azuredeploy.json ARM 模板文件部署到您的 Azure 订阅,从而创建必要的 Azure 资源。 这可能会在您的 Azure 帐户中产生相应费用。

请查看一般指南文档,其中有一部分概述了 Azure 服务的命名规则和限制。

备注

如果您对 ARM 模板的工作原理感兴趣,请参阅此参考体系结构中使用的每个不同服务对应的 Azure 资源管理器模板文档:

有两种类型的 Azure 认知服务订阅。 第一种是单一服务订阅,例如计算机视觉或语音服务。 单一服务订阅仅限所订阅的服务。 第二种类型是多服务订阅。 这样,通过单一订阅就能获得多种 Azure 认知服务。 此选项还将合并帐单。 为了使此参考体系结构尽可能模块化,认知服务均设置为单一服务。

最后,添加以下函数 应用程序设置,以便示例项目可以连接 Azure 服务:

  • EVENTHUB_CONNECTION_STRING - 所创建的 Azure 事件中心命名空间的连接字符串
  • TRANSLATORTEXT_KEY - 创建的用于访问 Azure 文本翻译认知服务的访问密钥

提示

要在本地运行 Azure Functions,请使用这些相同的应用设置更新 local.settings.json 文件。

分步操作

  1. 玩家的设备在 Azure 流量管理器确定的特定区域中打开与聊天服务器的持久加密连接。 聊天服务器创建一个进程,负责维护与玩家的连接以及一些基本的元数据。
  2. 玩家的客户端通过先前创建的安全连接向聊天服务器发送聊天消息。 此玩家在聊天服务器中的进程接收消息并进行解密和解析。
  3. 运行标准验证,聊天服务器调用 Azure 事件中心服务(以保持消息顺序)。
  4. Azure 事件中心充当 Azure Function 的输入触发器。
  5. Azure Function 调用 Azure 文本翻译服务,检查玩家发送的消息并返回结果。
  6. 设置另一个 Azure 事件中心作为 Azure Function 的输出。
  7. 聊天服务器从 Azure 事件中心接收结果。
  8. (可选)聊天服务器将原始消息和来自 Azure 文本翻译服务的翻译版本保存在持久存储(例如 Azure Data Lake Storage)中。
  9. 如果存储结果,可以选择保存到 Azure Data Lake Analytics 以进行分析。
  10. 然后,将来自 Azure 文本翻译服务的结果发送到聊天服务器中收信玩家的相关进程。 这些进程对消息作进一步验证,将其序列化,然后通过安全连接将其发送到收信玩家的设备。 最后,消息显示在聊天屏幕中。

Azure 事件中心

请参阅此快速入门,了解以多种编程语言将事件发送到事件中心的简单实现。 此处提供了一些其他示例。

由 Azure 事件中心输出到另一个 Azure 事件中心触发的函数

触发事件中心触发器函数时,会将触发此函数的消息作为字符串传入此函数中。 使用事件中心输出绑定将事件写入事件流。

[return: EventHub("ehigce-output", Connection = "EventHubConnectionAppSetting")]
    public static string Run([EventHubTrigger("ehigce-input", Connection = "EventHubConnectionAppSetting")] string chatString, ILogger log)

请查看调用认知服务时出现 401 拒绝访问错误的常见原因和解决方案

安全注意事项

不要将任何事件中心或认知服务连接字符串硬编码到函数的源中。 但至少应充分利用函数应用设置,或者,若要获取更高的安全性,请改用密钥保管库。 有一个指南介绍如何创建密钥保管库、如何将托管服务与函数标识结合使用,以及如何从函数中读取存储在密钥保管库中的机密

查看事件中心身份验证和安全模型概述并付诸实践,确保只有聊天服务器可以与事件中心通信。

文本翻译 API 可以使用域名或 IP 筛选在防火墙后进行翻译。 域名筛选是首选方法。 我们不建议在进行 IP 筛选的防火墙后运行 Microsoft Translator,因为此设置将来可能会失效,并且不予提前通知。 有关所有详细信息,请参阅如何使用文本翻译 API 在 IP 防火墙后进行翻译

缩放

此体系结构中有两处可能会成为瓶颈,您应该知晓并制定应对方案:

  1. 认知服务具有良好的可伸缩性,但默认受到限制。 如果您计划大规模使用认知服务,请联系 Azure 支持以增加容量。
  2. 需要扩展接收 Azure 事件中心响应的聊天服务器。 请启动足够多的虚拟机来满足需求。

备选方案

如果您有兴趣使用基于 Apache Spark 的平台收集分析数据,可以考虑利用 Azure Redis 缓存Azure Databricks

其他资源和示例

适用于 Unity 的 Azure 事件中心 SDK:这是一个沙盒项目。 这篇文章中的内容不受支持,因此可能已过期或不处于工作状态。

定价

如果您没有 Azure 订阅,可以创建免费帐户,开始使用 12 个月的免费服务。 除非您超出这些服务的使用限制,否则无需为 Azure 免费帐户中包含的这些免费服务付费。 了解如何通过 Azure 门户使用情况文件查看服务使用情况。

您需要承担运行这些参考体系结构时所使用的 Azure 服务的费用。 总金额将因使用情况而异。 请参阅参考体系结构中使用的每项服务的定价网页:

您还可以使用 Azure 定价计算器,以配置和估算您计划使用的 Azure 服务的成本。