本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
详细教程:了解构建示例应用程序的详细信息
快速入门教程介绍了如何使用quick-start.py
和构建、启动、停止和删除示例模拟stop-and-delete.py
。本教程将详细介绍这些脚本的工作原理,以及这些脚本可以采用哪些其他参数来最大限度地提高自定义 Weaver 仿真的灵活性。
要求
开始之前,请确保您已完成 对 SimSpace Weaver 进行设置 中的步骤。
步骤 1:启用日志记录(可选)
启用日志记录
-
导航至:
sdk-folder
/Samples/PathfindingSample/tools -
在文本编辑器中打开架构文件:
pathfinding-single-worker-schema.yaml
-
找到文件开头的
simulation_properties:
部分:simulation_properties: default_entity_index_key_type: "Vector3<f32>"
-
在
simulation_properties:
一行之后插入以下 2 行:log_destination_service: "logs" log_destination_resource_name: "MySimulationLogs"
-
确认
simulation_properties:
部分与以下内容相同:simulation_properties: log_destination_service: "logs" log_destination_resource_name: "MySimulationLogs" default_entity_index_key_type: "Vector3<f32>"
-
保存文件并退出文本编辑器。
第 2 步:开始模拟
如快速入门教程所示,启动示例仿真的最基本步骤是:
-
导航至:
sdk-folder/Samples/PathfindingSample/tools/cloud
-
运行以下命令之一:
-
码头工人:
python quick-start.py
-
WSL:
python quick-start.py --al2
-
此脚本可自动执行常见的终端命令,所有这些命令均可使用手动执行。 AWS CLI这些步骤是:
-
将 Weaver 架构上传到 S3。
-
SimSpace Weaver 使用架构来配置您的模拟。架构是一个 YAML 格式的纯文本文件。有关更多信息,请参阅 配置模拟。
-
-
构建并上传自定义容器(可选)。
-
如果您的架构定义了自定义容器,则快速启动脚本将构建 docker 镜像并将其上传到 Amazon ECR。有关更多信息,请参阅 自定义容器。有关此功能的示例,请参阅
PythonBubblesSample
架构。
-
-
构建 项目。
-
quick-start.py
调用中定义的build_project
函数build.py
。此步骤将因项目而异。对于 PathfindingSample,使用了 CMake。可以在中找到相应的 CMake 和 Docker 命令。build.py
-
-
将构建项目上传到 S3。
-
您可以检查您的 S3 存储桶,以确保所有上传都成功了。有关使用 Amazon S3 的更多信息,请参阅《Amazon Simple Storage Service 用户指南》中的创建、配置和使用 Amazon S3 存储桶。
-
示例应用程序 zip 和 S3 存储桶使用以下名称格式:
-
weaver-sample-bucket-account-number-region
-
空间应用程序:
ProjectNameSpatial.zip
-
查看(自定义)应用程序:
ProjectNameView.zip
-
-
-
开始模拟。
-
这是
aws simspaceweaver start-simulation
AWS CLI 通话的包装。有关更多信息,请参阅的AWS CLI 命令参考 SimSpace Weaver。 -
该脚本将循环运行,直到模拟状态变成
STARTED
或FAILED
。模拟可能需要几分钟才能启动。
-
-
获取仿真详情。
-
DescribeSimulation API 提供有关模拟的详细信息,包括其状态。模拟可处于以下几种状态之一:
模拟生命周期状态
-
STARTING
– 调用 StartSimulation 后的初始状态 -
STARTED
– 所有空间应用程序均已启动且运行状况正常 -
STOPPING
– 调用 StopSimulation 后的初始状态 -
STOPPED
– 所有计算资源均已停止 -
DELETING
– 调用 DeleteSimulation 后的初始状态 -
DELETED
– 所有分配给模拟的资源均已被删除 -
FAILED
– 模拟发生严重错误/故障且已停止 -
SNAPSHOT_IN_PROGRESS
– 正在拍摄快照
获取模拟详细信息
-
调用 ListSimulations API。
aws simspaceweaver list-simulations
该脚本应显示有关您的每个模拟的详细信息,类似于以下内容:
{ "Status": "STARTED", "CreationTime": 1664921418.09, "Name": "MyProjectSimulation_22-10-04_22_10_15", "Arn": "arn:aws:simspaceweaver:us-west-2:111122223333:simulation/MyProjectSimulation_22-10-04_22_10_15", "TargetStatus": "STARTED" }
-
调用 DescribeSimulation 以获取模拟详细信息。将
simulation-name
替换为上一步输出中模拟的 Name。aws simspaceweaver describe-simulation --simulation
simulation-name
该脚本应显示有关指定模拟的更多详细信息,类似于以下内容:
{ "Status": "STARTED", "CreationTime": 1664921418.09, "Name": "MyProjectSimulation_22-10-04_22_10_15", "Arn": "arn:aws:simspaceweaver:us-west-2:111122223333:simulation/MyProjectSimulation_22-10-04_22_10_15", "TargetStatus": "STARTED" }
-
-
-
启动定制化 App。
-
SimSpace Weaver 不管理定制化 App 的生命周期。您必须启动自定义应用程序。最佳实践是在启动模拟时钟之前启动自定义应用程序,不过,您可以在启动时钟之后启动自定义应用程序。
您可以调用 StartApp API 来启动您的定制化应用程序。
aws simspaceweaver start-app --simulation
simulation-name
--nameapp-name
--domaindomain-name
StartApp API 调用将使用您提供的名称创建和启动自定义应用程序的新实例。如果您提供已存在的应用程序的名称,则会收到一条错误消息。如果要重新启动特定应用程序(实例),则必须先停止该应用程序并将其删除。
注意
在启动自定义应用程序之前,模拟的状态必须为
STARTED
。示例应用程序提供了可查看模拟的
ViewApp
自定义应用程序。该应用程序为您提供用于连接模拟客户端的静态 IP 地址和端口号(您将在本教程后面的步骤中执行此操作)。您可以将 domain 看作一类具有相同可执行代码和启动选项的应用程序。app name 标识应用程序的实例。有关 SimSpace Weaver 概念的更多信息,请参阅SimSpace Weaver 的重要概念。启动自定义应用程序后,您可以使用 DescribeApp API 检查其状态。
aws simspaceweaver describe-app --simulation
simulation-name
--appapp-name
--domaindomain-name
启动本教程中的查看应用程序
-
呼叫StartApp
ViewApp
。aws simspaceweaver start-app --simulation
simulation-name
--name ViewApp --domain MyViewDomain -
调用 DescribeApp 以查看自定义应用程序的状态。
aws simspaceweaver describe-app --simulation
simulation-name
--app ViewApp --domain MyViewDomain
在自定义应用程序(实例)的状态变成
STARTED
后,DescribeApp 的输出将包括该自定义应用程序(实例)的 IP 地址和端口号。在以下示例输出中,IP 地址是Address
的值,端口号是EndpointInfo
数据块中Actual
的值。{ "Status": "STARTED", "Domain": "MyViewDomain", "TargetStatus": "STARTED", "Simulation": "MyProjectSimulation_22-10-04_22_10_15", "LaunchOverrides": { "LaunchCommands": [] }, "EndpointInfo": { "IngressPortMappings": [ { "Declared": 7000, "Actual": 4321 } ], "Address": "198.51.100.135" }, "Name": "ViewApp" }
注意
Declared
的值是应用程序代码应绑定的端口号。的值Actual
是向客户端 SimSpace Weaver 公开的用于连接您的应用程序的端口号。 SimSpace Weaver 将Declared
端口映射到端Actual
口。注意
您可以使用中描述的过程获取定制化应用程序的 IP 地址和端口号来获取任何已启动的自定义应用程序的 IP 地址和端口号。
-
-
-
启动时钟。
-
首次创建模拟时,它有一个时钟,但时钟不会运行。如果时钟未运行,模拟将不会更新状态。启动时钟后,它会开始向应用程序发送时钟周期。每次勾选,您的空间应用程序都会遍历它们拥有的实体,并将结果提交给 SimSpace Weaver
注意
启动时钟可能需要 30-60 秒。
调用 StartClock API。
aws simspaceweaver start-clock --simulation
simulation-name
注意
StartClock API 使用您的
,您可以使用 ListSimulations API 找到该名称:simulation-name
aws simspaceweaver list-simulations
-
快速启动参数
-
-h、--help
-
列出这些参数。
-
-
--干净
-
在构建之前,请删除构建目录的内容。
-
-
--al2
-
直接在本机计算机上构建,而不是 Docker。只有在 Amazon Linux 2 环境(例如 WSL)中运行时才使用此选项。
-
-
--仅上传
-
仅将架构和应用程序 zip 上传到 Amazon S3,不要开始模拟。
-
-
--nobuild
-
跳过重建项目。
-
-
--没有容器
-
跳过重建架构中列出的模拟容器。
-
-
--控制台客户端
-
自动构建并连接 config.py 中列出的控制台客户端。
-
-
--架构架构
-
此调用将使用什么架构。config.py 中默认为 “架构” 的值。
-
-
--name NAME
-
模拟将使用什么名字。默认为 config.py 中'项目名称'的日期-时间的值。
-
步骤 3:检查日志(可选)
SimSpace Weaver 将模拟管理消息和应用程序的控制台输出写入 Amazon CloudWatch Logs。有关使用日志的更多信息,请参阅 Amazon Logs 用户指南中的使用日志组和 CloudWatch 日志流。
您创建的每个模拟在 Log CloudWatch s 中都有自己的日志组。日志组的名称在模拟架构中指定。在以下架构片段中,log_destination_service
的值为 logs
。这意味着 log_destination_resource_name
的值是日志组的名称。在本例中,日志组是 MySimulationLogs
。
simulation_properties: log_destination_service: "logs" log_destination_resource_name: "MySimulationLogs" default_entity_index_key_type: "Vector3<f32>"
在启动模拟日志组后,您还可以使用 DescribeSimulation API 来查找该日志组的名称。
aws simspaceweaver describe-simulation --simulation
simulation-name
以下示例显示了 DescribeSimulation 的输出中描述日志配置的部分。日志组的名称显示在 LogGroupArn
的末尾。
"LoggingConfiguration": { "Destinations": [ { "CloudWatchLogsLogGroup": { "LogGroupArn": "arn:aws:logs:us-west-2:111122223333:log-group:MySimulationLogs" } } ] },
每个模拟日志组都包含多个日志流:
-
管理日志流- SimSpace Weaver 服务生成的模拟管理消息。
/sim/management
-
错误日志流- SimSpace Weaver 服务生成的错误消息。只有在出现错误时,此日志流才会存在。 SimSpace Weaver 将您的应用程序写入的错误存储在它们自己的应用程序日志流中(请参阅以下日志流)。
/sim/errors
-
空间应用程序日志流(每个工作线程上的每个空间应用程序 1 个)– 空间应用程序生成的控制台输出。每个空间应用程序都会将日志写入其日志流。
spatial-app-id
是worker-id
末尾斜杠后的全部字符。/domain/
spatial-domain-name
/app/worker-worker-id
/spatial-app-id
-
自定义应用程序日志流(每个自定义应用程序实例 1 个)– 自定义应用程序生成的控制台输出。每个自定义应用程序实例都会将日志写入其日志流。
/domain/
custom-domain-name
/app/custom-app-name
/random-id
-
服务应用程序日志流(每个服务应用程序实例 1 个)– 服务应用程序生成的控制台输出。每个服务应用程序都会将日志写入其日志流。
service-app-id
是service-app-name
末尾斜杠后的全部字符。/domain/
service-domain-name
/app/service-app-name
/service-app-id
注意
示例应用程序没有服务应用程序。
第 4 步:查看您的模拟
SimSpace Weaver 应用程序 SDK 提供了不同的选项来查看示例应用程序。如果你在本地不支持虚幻引擎开发,你可以使用示例控制台客户端。虚幻引擎客户端的说明假设你使用的是Windows。
当实体事件发生时,控制台客户端会显示一个事件列表。客户端从 ViewApp
中获取实体事件信息。如果您的控制台客户端显示了事件列表,则确认了模拟中与 ViewApp
和活动的网络连接。
PathfindingSample
模拟在二维平面上创建静止和移动的实体。移动的实体围绕静止实体移动。Unreal Engine 客户端提供实体事件的可视化效果。
控制台客户端
quick-start.py
如果包含该--consoleclient
选项,则在启动示例时可以自动构建和连接控制台客户端。要在调用后quick-start.py
构建和连接控制台客户端,请执行以下操作:
导航至:
sdk-folder/Clients/TCP/CppConsoleClient
运行脚本来构建和连接客户端:
python start_client.py --host ip-address --port port-number
该脚本将执行以下操作:
-
使用 CMake 构建控制台客户端。
-
使用给定的 IP 地址和端口号启动构建的可执行文件。
.\WeaverNngConsoleClient.exe --url tcp://
ip-address:port-number
虚幻引擎客户端
请参阅 启动虚幻引擎视图客户端。
第 5 步:停止并删除您的模拟
导航至:
sdk-folder/Samples/PathfindingSample/tools/cloud
查找您的模拟名称:
aws simspaceweaver list-simulations
停止并删除模拟:
python stop-and-delete.py --simulation simulation-name
该脚本stop-and-delete.py
将执行以下操作:
-
调用 AWS CLI 命令停止模拟。
-
aws simspaceweaver stop-simulation
-
有关更多信息,请参阅的AWS CLI 命令参考 SimSpace Weaver。
-
-
调用 AWS CLI 命令删除模拟。
-
aws simpaceweaver delete-simulation
-
有关更多信息,请参阅的AWS CLI 命令参考 SimSpace Weaver。
-
stop-and-delete 参数
-
-h、--help
-
列出这些参数。
-
-
--仿真模拟
-
将模拟的名称命名为 stop-and-delete
-
-
--停下来
-
只停止模拟。不会将其删除。
-
-
--删除
-
仅删除模拟。只有当模拟为
STOPPED
或时才会起作用FAILED
。
-
故障排除
参见快速故障排除入门教程。