本页内容

QGrpcChannelOptions Class

QGrpcChannelOptions 类提供了多种选项,用于对 gRPC 通道进行精细调整。更多内容...

标题: #include <QGrpcChannelOptions>
CMake: find_package(Qt6 REQUIRED COMPONENTS Grpc)
target_link_libraries(mytarget PRIVATE Qt6::Grpc)
自: Qt 6.6
在 QML 中: GrpcChannelOptions

QGrpcChannelOptions 比较

类别可比较类型
相等性QGrpcChannelOptions

公共函数

QGrpcChannelOptions()
QGrpcChannelOptions(const QGrpcChannelOptions &other)
QGrpcChannelOptions(QGrpcChannelOptions &&other)
~QGrpcChannelOptions()
(since 6.12) QtGrpc::CompressionAlgorithms acceptedCompressionAlgorithms() const
(since 6.10) QGrpcChannelOptions &addMetadata(QByteArrayView key, QByteArrayView value)
std::optional<std::chrono::milliseconds> deadlineTimeout() const
(since 6.11) std::optional<bool> filterServerMetadata() const
(since 6.12) std::optional<quint64> maximumReceiveMessageSize() const
(until 6.13) QHash<QByteArray, QByteArray> metadata() &&
(until 6.13) const QHash<QByteArray, QByteArray> &metadata() const &
(since 6.10) QMultiHash<QByteArray, QByteArray> metadata(QtGrpc::MultiValue_t) &&
(since 6.10) const QMultiHash<QByteArray, QByteArray> &metadata(QtGrpc::MultiValue_t) const &
(since 6.12) std::optional<QtGrpc::CompressionAlgorithm> requestCompression() const
(since 6.8) QGrpcSerializationFormat serializationFormat() const
(since 6.12) QGrpcChannelOptions &setAcceptedCompressionAlgorithms(QtGrpc::CompressionAlgorithms algorithms)
QGrpcChannelOptions &setDeadlineTimeout(std::chrono::milliseconds timeout)
(since 6.11) QGrpcChannelOptions &setFilterServerMetadata(bool value)
(since 6.12) QGrpcChannelOptions &setMaximumReceiveMessageSize(quint64 size)
(until 6.13) QGrpcChannelOptions &setMetadata(QHash<QByteArray, QByteArray> &&metadata)
(since 6.10) QGrpcChannelOptions &setMetadata(QMultiHash<QByteArray, QByteArray> &&metadata)
(until 6.13) QGrpcChannelOptions &setMetadata(const QHash<QByteArray, QByteArray> &metadata)
(since 6.10) QGrpcChannelOptions &setMetadata(const QMultiHash<QByteArray, QByteArray> &metadata)
(since 6.10) QGrpcChannelOptions &setMetadata(std::initializer_list<std::pair<QByteArray, QByteArray>> list)
(since 6.12) QGrpcChannelOptions &setRequestCompression(QtGrpc::CompressionAlgorithm algorithm)
(since 6.8) QGrpcChannelOptions &setSerializationFormat(const QGrpcSerializationFormat &format)
QGrpcChannelOptions &setSslConfiguration(const QSslConfiguration &sslConfiguration)
std::optional<QSslConfiguration> sslConfiguration() const
(since 6.8) void swap(QGrpcChannelOptions &other)
(since 6.8) operator QVariant() const
QGrpcChannelOptions &operator=(QGrpcChannelOptions &&other)
QGrpcChannelOptions &operator=(const QGrpcChannelOptions &other)

静态公共成员

(since 6.12) QtGrpc::CompressionAlgorithms supportedCompressionAlgorithms()
(since 6.11) bool operator!=(const QGrpcChannelOptions &lhs, const QGrpcChannelOptions &rhs)
(since 6.8) QDebug operator<<(QDebug debug, const QGrpcChannelOptions &chOpts)
(since 6.11) bool operator==(const QGrpcChannelOptions &lhs, const QGrpcChannelOptions &rhs)

详细说明

QGrpcChannelOptions 允许您自定义一个 gRPC™ 通道。某些选项适用于在关联通道上运行的所有远程过程调用(RPC),该通道用于与服务进行通信。

若要为特定的 RPC 覆盖选项,请使用 `QGrpcCallOptions`。

QGrpcChannelOptions channelOpts;
// 将通用元数据应用于每个 RPC
channelOpts.setMetadata({
    {"header" , "value1"},
    {"header" , "value2"},
});
const auto &md =channelOpts.metadata(QtGrpc::MultiValue);
qDebug() << "Channel Metadata: " << md;

// 为每个 RPC 设置 2 秒的超时
channelOpts.setDeadlineTimeout(2s);
qDebug() << "Channel timeout: " << channelOpts.deadlineTimeout();

// 配置 SSL/TLS 设置
channelOpts.setSslConfiguration(QSslConfiguration());

注意: 这些选项的具体实现由 通道的实现决定。

成员函数文档

QGrpcChannelOptions::QGrpcChannelOptions()

默认——构造一个空的 QGrpcChannelOptions 对象。

QGrpcChannelOptions::QGrpcChannelOptions(const QGrpcChannelOptions &other)

从other 复制并构造一个QGrpcChannelOptions对象。

[constexpr noexcept default] QGrpcChannelOptions::QGrpcChannelOptions(QGrpcChannelOptions &&other)

从 `other` 移动构造一个新的 `QGrpcChannelOptions`。

注意: 被移动的对象 other 将处于部分初始化状态,在此状态下,唯一有效的操作是销毁和赋值新值。

[noexcept] QGrpcChannelOptions::~QGrpcChannelOptions()

销毁QGrpcChannelOptions 。

[since 6.12] QtGrpc::CompressionAlgorithms QGrpcChannelOptions::acceptedCompressionAlgorithms() const

返回该通道愿意从服务器接受的压缩算法。该集合始终包含Identity ,因为gRPC 规范规定必须接受未压缩的消息。

该值用于构建grpc-accept-encoding 请求头。如果服务器响应的压缩算法不在此集合中,则调用将以Unimplemented 状态码结束。

默认情况下,此函数为supportedCompressionAlgorithms():会声明当前 Qt 构建版本能够协商的所有算法。

该函数在 Qt 6.12 中引入。

另请参阅 setAcceptedCompressionAlgorithms() 和supportedCompressionAlgorithms()。

[since 6.10] QGrpcChannelOptions &QGrpcChannelOptions::addMetadata(QByteArrayView key, QByteArrayView value)

如果metadata 中尚未包含完全匹配的键值对,则将key 和value 添加到该列表中。同一键可以带有不同的值出现多次。

注意: 以grpc- 或qtgrpc- 为前缀的键由 gRPC 和QtGrpc 预留。在构建请求时,使用这些前缀提供的条目将被忽略。具体通道可能会施加进一步的限制;请参阅QGrpcHttp2Channel#Reserved metadata keys 。

注意:此 元数据包含在通过该通道进行的每次 RPC 中。当 RPC 开始时,通道元数据会与任何调用特定的元数据合并——参见QGrpcCallOptions::addMetadata()

该函数在 Qt 6.10 中引入。

另请参阅 metadata() 和setMetadata()。

[noexcept] std::optional<std::chrono::milliseconds> QGrpcChannelOptions::deadlineTimeout() const

返回用于计算该通道截止时间的超时时长。

如果该字段未设置,则返回一个空的std::optional 。

另请参阅 setDeadlineTimeout()。

[noexcept, since 6.11] std::optional<bool> QGrpcChannelOptions::filterServerMetadata() const

如果结果中排除了与协议相关的服务器元数据,则返回true 。若要包含从服务器接收到的所有元数据,则返回false 。

如果未设置此字段,则返回一个空的std::optional 。

该函数于 Qt 6.11 中引入。

另请参阅 setFilterServerMetadata() 和QGrpcCallOptions::filterServerMetadata()。

[since 6.12] std::optional<quint64> QGrpcChannelOptions::maximumReceiveMessageSize() const

返回传入 gRPC 消息的最大允许大小(以字节为单位)。该限制适用于经过传输层解密和任何按消息进行的解压缩后的解码 gRPC 帧有效载荷。

如果未指定该值,则返回一个空的std::optional 。

默认情况下,该值未指定。

注意: 当未显式设置此选项时,QGrpcHttp2Channel 会使用QT_GRPC_MAXIMUM_RECEIVE_MESSAGE_SIZE 环境变量作为后备值。如果该环境变量未设置,则使用4 MiB的内置默认值。请参阅 l{环境变量后备值}。

该函数在 Qt 6.12 中引入。

另请参阅 setMaximumReceiveMessageSize() 和QGrpcCallOptions::maximumReceiveMessageSize()。

[until 6.13] QHash<QByteArray, QByteArray> QGrpcChannelOptions::metadata() &&

[noexcept, until 6.13] const QHash<QByteArray, QByteArray> &QGrpcChannelOptions::metadata() const &

该函数计划在 6.13 版本中被废弃。

请改用metadata (QtGrpc::MultiValue)。

返回元数据。如果该字段未设置,则返回空元数据。

注意: 以grpc- 或qtgrpc- 为前缀的键被 gRPC 和QtGrpc 预留。在构建请求时,使用这些键提供的条目将被忽略。具体的通道可能会施加进一步的限制;请参阅QGrpcHttp2Channel#Reserved metadata keys 。

另请参阅 metadata(QtGrpc::MultiValue_t) 和setMetadata()。

[since 6.10] QMultiHash<QByteArray, QByteArray> QGrpcChannelOptions::metadata(QtGrpc::MultiValue_t) &&

[noexcept, since 6.10] const QMultiHash<QByteArray, QByteArray> &QGrpcChannelOptions::metadata(QtGrpc::MultiValue_t) const &

返回元数据。如果该字段未设置,则返回空元数据。

注意: 以grpc- 或qtgrpc- 为前缀的键 被gRPC 和QtGrpc 预留。在构建请求时,使用这些前缀提供的条目将被忽略。具体通道可能会施加进一步的限制;请参阅QGrpcHttp2Channel#Reserved metadata keys 。支持每个键有多个值。

const auto &md = opts.metadata(QtGrpc::MultiValue);

这些函数于 Qt 6.10 中引入。

另请参阅 setMetadata 。

[since 6.12] std::optional<QtGrpc::CompressionAlgorithm> QGrpcChannelOptions::requestCompression() const

返回用于压缩该通道或呼叫中出站消息的压缩算法。

如果该字段未设置,则返回一个空的std::optional 。

该函数在 Qt 6.12 中引入。

另请参阅 setRequestCompression() 和QGrpcCallOptions::requestCompression()。

[since 6.8] QGrpcSerializationFormat QGrpcChannelOptions::serializationFormat() const

返回通道所使用的序列化格式。

如果该字段未设置,则返回一个由Default 构造的序列化格式。

该函数在 Qt 6.8 中引入。

另请参阅 setSerializationFormat()。

[since 6.12] QGrpcChannelOptions &QGrpcChannelOptions::setAcceptedCompressionAlgorithms(QtGrpc::CompressionAlgorithms algorithms)

设置允许的压缩格式algorithms ,并返回更新后对象的引用。

Identity 该标志总是会被隐式添加,因为 gRPC 规范要求客户端接受未压缩的消息。

如果{QtGrpc::CompressionAlgorithm::Identity} 是唯一接受的算法,则会拒绝压缩响应。添加其他标志可允许服务器使用这些压缩算法进行响应。

只有该 Qt 构建版本支持且包含在algorithms 中的算法,才会作为可接受的响应压缩方法向服务器发布。supportedCompressionAlgorithms() 中不存在的标志将被静默丢弃。

该函数于 Qt 6.12 中引入。

另请参阅 acceptedCompressionAlgorithms() 和supportedCompressionAlgorithms()。

QGrpcChannelOptions &QGrpcChannelOptions::setDeadlineTimeout(std::chrono::milliseconds timeout)

设置timeout ,并返回更新后对象的引用。

超时时间限定了客户端愿意等待服务器响应的最长时间。实际超时时间是通过将timeout 与RPC的开始时间相加计算得出的。

该截止时间适用于 RPC 的整个生命周期,其中包括接收先前已启动调用的最终QGrpcStatus ,因此对于(长期运行的)流而言,这可能是不需要的。

注意:设置 此字段适用于通道上运行的所有 RPC,但被QGrpcCallOptions::setDeadlineTimeout() 重写的情况除外

另请参阅 deadlineTimeout()。

[since 6.11] QGrpcChannelOptions &QGrpcChannelOptions::setFilterServerMetadata(bool value)

如果 `value ` 的值为 `true`,则由 gRPC 传输层定义的与协议相关的元数据(例如保留的 `grpc- ` 键)将被排除。如果 `value ` 的值为 `false`,则将包含从服务器接收到的所有元数据。

注意: 此字段的设置 适用于通道上运行的所有 RPC,但被QGrpcCallOptions::filterServerMetadata

该函数于 Qt 6.11 中引入。

另请参阅 filterServerMetadata() 和QGrpcCallOptions::setFilterServerMetadata()。

[since 6.12] QGrpcChannelOptions &QGrpcChannelOptions::setMaximumReceiveMessageSize(quint64 size)

设置传入消息的size 最大值(以字节为单位),并返回更新后对象的引用。

超过此限制的消息在有效负载被缓冲之前,会因StatusCode::ResourceExhausted 而被拒绝。该值将原样使用,因此size 的值设为0 时,仅接受空消息。

注意:具体的 通道实现可能会对有效限制施加硬性上限。QGrpcHttp2Channel 传输将该值限制在gRPC-over-HTTP/2帧有效载荷(2^32 - 1 )的最大字节数,或在32位平台上为qsizetype 的最大值减去5字节的gRPC帧头。 若配置的值大于该上限,则会被限制在该上限内。

注意:设置 此字段适用于通道上运行的所有 RPC,但被QGrpcCallOptions::setMaximumReceiveMessageSize() 覆盖的除外

该函数在 Qt 6.12 中引入。

另请参阅 maximumReceiveMessageSize() 和QGrpcCallOptions::setMaximumReceiveMessageSize()。

[until 6.13] QGrpcChannelOptions &QGrpcChannelOptions::setMetadata(QHash<QByteArray, QByteArray> &&metadata)

[until 6.13] QGrpcChannelOptions &QGrpcChannelOptions::setMetadata(const QHash<QByteArray, QByteArray> &metadata)

该函数计划在 6.13 版本中被废弃。

请改用QMultiHash 的重载版本。

该函数用于设置metadata ,并返回更新后对象的引用。

注意: 以grpc- 或qtgrpc- 为前缀的键被 gRPC 和QtGrpc 预留。在构建请求时,使用这些键提供的条目将被忽略。具体的通道可能会施加进一步的限制;请参阅QGrpcHttp2Channel#Reserved metadata keys 。

注意:此 元数据包含在通过该通道发出的每个 RPC 中。当 RPC 开始时,通道元数据会与任何调用特定的元数据合并——参见QGrpcCallOptions::setMetadata(QMultiHash)

另请参阅 metadata()。

[since 6.10] QGrpcChannelOptions &QGrpcChannelOptions::setMetadata(QMultiHash<QByteArray, QByteArray> &&metadata)

[since 6.10] QGrpcChannelOptions &QGrpcChannelOptions::setMetadata(const QMultiHash<QByteArray, QByteArray> &metadata)

[since 6.10] QGrpcChannelOptions &QGrpcChannelOptions::setMetadata(std::initializer_list<std::pair<QByteArray, QByteArray>> list)

设置metadata ,并返回更新后对象的引用。

注意: 以grpc- 或qtgrpc- 为前缀的键由 gRPC 和QtGrpc 预留。在构建请求时,使用这些前缀提供的条目将被忽略。具体通道可能会施加进一步的限制;请参阅QGrpcHttp2Channel#Reserved metadata keys 。支持每个键具有多个值。

注意:此 元数据包含在通过该通道发出的每个 RPC 中。当 RPC 开始时,通道元数据会与任何特定于调用的元数据合并——参见QGrpcCallOptions::setMetadata(QMultiHash)

这些函数在 Qt 6.10 中引入。

另请参阅 metadata(QtGrpc::MultiValue_t)。

[since 6.12] QGrpcChannelOptions &QGrpcChannelOptions::setRequestCompression(QtGrpc::CompressionAlgorithm algorithm)

设置用于压缩客户端发送的消息的压缩algorithm ,并返回更新后对象的引用。

设置后,该算法将在grpc-encoding 请求头中声明。每条消息均独立进行压缩;如果压缩无法减小有效载荷大小,则无论如何,该消息都将以未压缩的形式发送,此时Compressed-Flag 将设置为0 。

注意:对 同时包含敏感数据和可能受攻击者影响的数据的消息进行压缩 ,可能会使连接暴露于 CRIME 或 BREACH 等压缩侧信道攻击。如果可能,请避免对这类消息进行压缩,或者将敏感数据和不可信数据分离到不同的请求中。

注意: 此字段的设置 适用于通道上的所有 RPC,但被QGrpcCallOptions::setRequestCompression() 重写的情况除外

此函数在 Qt 6.12 中引入。

另请参阅 requestCompression() 和QGrpcCallOptions::setRequestCompression()。

[since 6.8] QGrpcChannelOptions &QGrpcChannelOptions::setSerializationFormat(const QGrpcSerializationFormat &format)

为通道设置序列化format ,并返回更新后对象的引用。

该函数在 Qt 6.8 中引入。

另请参阅 serializationFormat()。

QGrpcChannelOptions &QGrpcChannelOptions::setSslConfiguration(const QSslConfiguration &sslConfiguration)

设置该通道的sslConfiguration ,并返回更新后对象的引用。

另请参阅 sslConfiguration()。

std::optional<QSslConfiguration> QGrpcChannelOptions::sslConfiguration() const

返回该通道的 SSL 配置。

如果未设置此字段,则返回一个空的 `std::optional`。

另请参阅 setSslConfiguration()。

[static noexcept, since 6.12] QtGrpc::CompressionAlgorithms QGrpcChannelOptions::supportedCompressionAlgorithms()

返回当前 Qt 构建版本可协商的压缩算法。Identity 始终存在,因为gRPC 规范要求消息必须为未压缩格式。Deflate 和Gzip 始终受支持。

该函数在 Qt 6.12 中引入。

另请参阅 acceptedCompressionAlgorithms() 和setAcceptedCompressionAlgorithms()。

[noexcept, since 6.8] void QGrpcChannelOptions::swap(QGrpcChannelOptions &other)

将 `other ` 与该对象进行交换。此操作速度极快,且绝不会失败。

该函数于 Qt 6.8 中引入。

[since 6.8] QGrpcChannelOptions::operator QVariant() const

根据该对象构建一个新的QVariant 。

该函数于 Qt 6.8 中引入。

[noexcept] QGrpcChannelOptions &QGrpcChannelOptions::operator=(QGrpcChannelOptions &&other)

将other 移入并赋值给此QGrpcChannelOptions ,并返回对更新后对象的引用。

注意: 被移动的源对象 other 将处于部分构筑状态,在此状态下,唯一有效的操作是销毁和赋值。

QGrpcChannelOptions &QGrpcChannelOptions::operator=(const QGrpcChannelOptions &other)

将other 赋值给此QGrpcChannelOptions ,并返回更新后对象的引用。

相关的非成员

[noexcept, since 6.11] bool operator!=(const QGrpcChannelOptions &lhs, const QGrpcChannelOptions &rhs)

如果lhs 和rhs 中acceptedCompressionAlgorithms 、deadlineTimeout 、filterServerMetadata 、maximumReceiveMessageSize 、metadata (QtGrpc::MultiValue_t)、requestCompression 、serializationFormat 以及sslConfiguration 的值不相同,则返回true 。

该函数在 Qt 6.11 中引入。

[since 6.8] QDebug operator<<(QDebug debug, const QGrpcChannelOptions &chOpts)

将chOpts 写入指定的流debug 。

该函数于 Qt 6.8 中引入。

[noexcept, since 6.11] bool operator==(const QGrpcChannelOptions &lhs, const QGrpcChannelOptions &rhs)

如果lhs 和rhs 中列出的acceptedCompressionAlgorithms 、deadlineTimeout 、filterServerMetadata 、maximumReceiveMessageSize 、metadata (QtGrpc::MultiValue_t)、requestCompression 、serializationFormat 以及sslConfiguration 均相等,则返回true 。

该函数在 Qt 6.11 中引入。

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.