在适用于 C++ 的 AWS SDK 中使用 Aws::SDKOptions 的常规配置
Aws::SDKOptions 结构包含 SDK 配置选项。Aws::SDKOptions 侧重于常规 SDK 配置,而 ClientConfiguration 结构则侧重于与 AWS 服务通信的配置。
Aws::SDKOptions 的实例被传递给 Aws::InitAPI 和 Aws::ShutdownAPI 方法。应将同一个实例发送给这两个方法。
以下示例演示了一些可用选项。
-
使用默认记录器开启日志记录
Aws::SDKOptions options; options.loggingOptions.logLevel = Aws::Utils::Logging::LogLevel::Info; Aws::InitAPI(options); { // make your SDK calls here. } Aws::ShutdownAPI(options); -
覆盖默认 HTTP 客户端工厂
Aws::SDKOptions options; options.httpOptions.httpClientFactory_create_fn = [](){ return Aws::MakeShared<MyCustomHttpClientFactory>( "ALLOC_TAG", arg1); }; Aws::InitAPI(options); { // make your SDK calls here. } Aws::ShutdownAPI(options);注意
httpOptions采用闭包(也称为匿名函数或 lambda 表达式)而不是std::shared_ptr。每个 SDK 工厂函数都以这种方式运作,因为在工厂分配内存时,内存管理器尚未安装。通过向该方法传递闭包,将在安全的情况下调用内存管理器来执行内存分配。完成此过程的一种简单方法是使用 Lambda 表达式。 -
使用全局
SIGPIPE处理程序如果您使用 curl 和 OpenSSL 构建适用于 C++ 的 SDK,则必须指定信号处理程序。如果您不使用自己的自定义信号处理程序,请将
installSigPipeHandler设置为true。Aws::SDKOptions options; options.httpOptions.installSigPipeHandler = true; Aws::InitAPI(options); { // make your SDK calls here. } Aws::ShutdownAPI(options);当
installSigPipeHandler为true时,适用于 C++ 的 SDK 会使用忽略SIGPIPE信号的处理程序。有关SIGPIPE的更多信息,请参阅 GNU 操作系统网站上的 Operation Error Signals。有关 curl 处理程序的更多信息,请参阅 curl 网站上的 CURLOPT_NOSIGNAL 说明 。 当远程端关闭连接时,curl 和 OpenSSL 的底层库可以发送一个
SIGPIPE信号来进行通知。这些信号必须由应用程序处理。有关此 curl 功能的更多信息,请参阅 curl 网站上的 libcurl thread safety。此行为不会自动内置到 SDK 中,因为信号处理程序对于每个应用程序来说都是全局的,并且该库是 SDK 的依赖项。