QGrpcOperationContext Class
QGrpcOperationContext 类为单个 gRPC™ 操作与通道之间的通信提供上下文。更多内容...
| 头文件: | #include <QGrpcOperationContext> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Grpc) target_link_libraries(mytarget PRIVATE Qt6::Grpc) |
| 自: | Qt 6.7 |
| 继承自: | QObject |
公共函数
| virtual | ~QGrpcOperationContext() override |
| const QGrpcCallOptions & | callOptions() const & |
(since 6.11) QtGrpc::RpcDescriptor | descriptor() const |
| QLatin1StringView | method() const |
(since 6.11) quint64 | operationId() const |
| QMetaType | responseMetaType() const |
| std::shared_ptr<const QAbstractProtobufSerializer> | serializer() const |
(since 6.10) const QMultiHash<QByteArray, QByteArray> & | serverInitialMetadata() const & |
(until 6.13) const QHash<QByteArray, QByteArray> & | serverMetadata() const & |
(since 6.10) const QMultiHash<QByteArray, QByteArray> & | serverTrailingMetadata() const & |
| QLatin1StringView | service() const |
| void | setResponseMetaType(QMetaType metaType) |
(since 6.10) void | setServerInitialMetadata(QMultiHash<QByteArray, QByteArray> &&metadata) |
(until 6.13) void | setServerMetadata(QHash<QByteArray, QByteArray> &&metadata) |
(until 6.13) void | setServerMetadata(const QHash<QByteArray, QByteArray> &metadata) |
(since 6.10) void | setServerTrailingMetadata(QMultiHash<QByteArray, QByteArray> &&metadata) |
信号
| void | cancelRequested() |
| void | finished(const QGrpcStatus &status) |
| void | messageReceived(const QByteArray &data) |
(since 6.11) void | serverInitialMetadataReceived(const QMultiHash<QByteArray, QByteArray> &metadata) |
| void | writeMessageRequested(const QByteArray &data) |
| void | writesDoneRequested() |
详细说明
当请求远程过程调用(RPC)时,系统会在内部构建 QGrpcOperationContext,用于协调客户端操作请求与通道操作结果之间的交互。
在客户端接口上请求的 RPC 会返回QGrpcOperation 的特化类,例如QGrpcCallReply 、QGrpcServerStream 、QGrpcClientStream 或QGrpcBidiStream 。这些类与底层的 QGrpcOperationContext 对应类隐式集成。
注意: 除非正在实现自定义通道,否则请勿 直接使用此类。
该类中包含的信号用于在面向客户端的QGrpcOperation 与QAbstractGrpcChannel 实现之间建立通信。这些操作本质上是异步的,多个RPC可以在同一通道上并发运行。 通道通常将所有操作一视同仁,而正确支持并限制其 RPC 类型所支持的功能子集,是通道的责任。
仅应由通道实现发出的信号包括:
由 `QGrpcOperation ` 及其特化版本发出的信号包括:
QAbstractGrpcChannel 的自定义实现必须处理客户端发出的信号(因为该方法未提供默认信号处理机制),并据此发出自己的信号。
成员函数文档
[override virtual noexcept] QGrpcOperationContext::~QGrpcOperationContext()
销毁操作上下文。
[noexcept] const QGrpcCallOptions &QGrpcOperationContext::callOptions() const &
返回该操作上下文所使用的调用选项。
有关全通道选项,请参阅QGrpcChannelOptions 。
[signal] void QGrpcOperationContext::cancelRequested()
当QGrpcOperation 请求取消通信时,会发出此信号。
通道应将其取消逻辑连接到此信号,并尝试取消 RPC,同时使用Cancelled 状态码结束该操作。无法保证取消操作一定成功。无需对从通道接收到的数据进行进一步处理,且应避免此类处理。
另请参阅 QGrpcOperation::cancel 。
[noexcept, since 6.11] QtGrpc::RpcDescriptor QGrpcOperationContext::descriptor() const
返回此操作上下文对应的QtGrpc::RpcDescriptor 。
该函数在 Qt 6.11 中引入。
[signal] void QGrpcOperationContext::finished(const QGrpcStatus &status)
当 RPC 完成时,该通道应发出此信号。
这通常意味着服务器已针对请求的 RPC 发送了“status ”并关闭了连接。QAbstractGrpcChannel 的实现应检测到这种情况并发出该信号。
收到此信号后,不应再通过此操作上下文进行任何进一步的通信。客户端随后可以安全地删除相应的 RPC 对象。
注意:该 信号与QGrpcOperation 信号隐式关联。
另请参阅 QGrpcOperation::finished 。
[signal] void QGrpcOperationContext::messageReceived(const QByteArray &data)
当从服务器接收到了新的data 数据块时,该通道应发出此信号。
对于客户端流和单向调用,这意味着唯一的最终响应已到达,通信即将结束。
对于服务器和双向流,通道应在接收到每条新消息时持续发出此信号。
注意:该 信号与QGrpcOperation 信号隐式关联。
另请参阅 QGrpcServerStream::messageReceived 和QGrpcBidiStream::messageReceived 。
[noexcept] QLatin1StringView QGrpcOperationContext::method() const
返回与该操作上下文相关联的服务的名称。
[noexcept, since 6.11] quint64 QGrpcOperationContext::operationId() const
返回此操作上下文的唯一标识符。
在应用程序生命周期内,每个 ID 在所有通道中都是唯一的。
该函数于 Qt 6.11 版本中引入。
QMetaType QGrpcOperationContext::responseMetaType() const
返回 RPC 结果消息的元数据类型。
另请参阅 setResponseMetaType()。
std::shared_ptr<const QAbstractProtobufSerializer> QGrpcOperationContext::serializer() const
返回此操作上下文的序列化器
[noexcept, since 6.10] const QMultiHash<QByteArray, QByteArray> &QGrpcOperationContext::serverInitialMetadata() const &
返回在收到任何响应消息之前从服务器接收到的初始元数据。
初始元数据由服务器在呼叫建立后立即发送。它可能包含为该呼叫提供上下文信息的键值对。
注意: 以grpc- 或qtgrpc- 为前缀的键由 gRPC™ 和QtGrpc 预留。在构建请求时,使用这些前缀提供的条目将被忽略。具体通道可能会施加进一步的限制;请参阅QGrpcHttp2Channel#Reserved metadata keys 。
注意: QGrpcOperation 会隐式使用此 方法。
该函数在 Qt 6.10 中引入。
另请参阅 setServerInitialMetadata()、QGrpcOperation::serverInitialMetadata() 和serverTrailingMetadata()。
[private signal, since 6.11] void QGrpcOperationContext::serverInitialMetadataReceived(const QMultiHash<QByteArray, QByteArray> &metadata)
当服务器返回其初始元数据时,会发出此信号。服务器的初始元数据会在 RPC 的初始响应之前发送给客户端。
接收到的元数据存储在metadata 中,也可通过serverInitialMetadata()获取。
注意:这是一个 私有信号。它可以在信号连接中使用,但用户无法触发它。
该函数在 Qt 6.11 中引入。
另请参阅 QGrpcOperation::serverInitialMetadataReceived 和QGrpcBidiStream::writesDone 。
[noexcept, until 6.13] const QHash<QByteArray, QByteArray> &QGrpcOperationContext::serverMetadata() const &
该函数计划在 6.13 版本中被废弃。
请改用serverInitialMetadata() 和serverTrailingMetadata()。
返回在收到任何响应消息之前从服务器接收到的初始元数据。
初始元数据由服务器在呼叫建立后立即发送。它可能包含为该呼叫提供上下文的键值对。
注意: 以grpc- 或qtgrpc- 为前缀的键由 gRPC 和QtGrpc 保留。在构建请求时,使用这些键提供的条目将被忽略。具体的通道可能会施加进一步的限制;请参阅QGrpcHttp2Channel#Reserved metadata keys 。
注意: QGrpcOperation 会隐式使用此 方法。
另请参阅 setServerMetadata()、serverInitialMetadata() 和QGrpcOperation::serverInitialMetadata()。
[noexcept, since 6.10] const QMultiHash<QByteArray, QByteArray> &QGrpcOperationContext::serverTrailingMetadata() const &
返回在所有响应消息之后从服务器接收到的尾部元数据。
尾部元数据仅在所有响应消息发送完毕且 RPC 即将完成时由服务器发送。它可能包含键值对,用于提供有关已完成调用的额外上下文信息。
注意: 以grpc- 或qtgrpc- 为前缀的键 已被gRPC 和QtGrpc 预留。在构建请求时,使用这些前缀提供的条目将被忽略。具体通道可能会施加进一步的限制;请参阅QGrpcHttp2Channel#Reserved metadata keys 。
注意:此 方法由QGrpcOperation 隐式调用。
该函数在 Qt 6.10 中引入。
另请参阅 QGrpcOperation::serverTrailingMetadata() 和setServerTrailingMetadata()。
[noexcept] QLatin1StringView QGrpcOperationContext::service() const
返回与该操作上下文相关联的服务名称。
void QGrpcOperationContext::setResponseMetaType(QMetaType metaType)
存储RPC结果消息的metaType 。
另请参阅 responseMetaType()。
[since 6.10] void QGrpcOperationContext::setServerInitialMetadata(QMultiHash<QByteArray, QByteArray> &&metadata)
设置在 RPC 开始时从服务器接收的metadata 。
该函数自 Qt 6.10 起引入。
另请参阅 serverInitialMetadata()。
[until 6.13] void QGrpcOperationContext::setServerMetadata(QHash<QByteArray, QByteArray> &&metadata)
[until 6.13] void QGrpcOperationContext::setServerMetadata(const QHash<QByteArray, QByteArray> &metadata)
该函数计划在 6.13 版本中被废弃。
请改用setServerInitialMetadata()。
设置在 RPC 开始时从服务器接收到的元数据。
另请参阅 setServerInitialMetadata()。
[since 6.10] void QGrpcOperationContext::setServerTrailingMetadata(QMultiHash<QByteArray, QByteArray> &&metadata)
设置在所有响应消息之后,从服务器接收到的尾部metadata 。
该函数在 Qt 6.10 中引入。
另请参阅 serverTrailingMetadata()。
[signal] void QGrpcOperationContext::writeMessageRequested(const QByteArray &data)
当QGrpcClientStream 或QGrpcBidiStream 将data 序列化完毕,并准备通过通道进行传输时,会发出此信号。
通道应将其写入逻辑与该信号连接,并在将序列化数据写入传输线之前,将其封装在与通道相关的头部信息中。
另请参阅 QGrpcClientStream::writeMessage 和QGrpcBidiStream::writeMessage 。
[signal] void QGrpcOperationContext::writesDoneRequested()
该信号由 `QGrpcClientStream ` 或 `QGrpcBidiStream ` 发出,用于指示消息写入已完成。通道应对此作出响应,对流进行半关闭操作。
注意: 收到此信号后, 流式 RPC 将不再允许进行写入操作。服务器仍可发送消息,这些消息应通过messageReceived() 进行转发。
另请参阅 QGrpcClientStream::writesDone 和QGrpcBidiStream::writesDone 。
© 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.