QGrpcOperationContext Class

QGrpcOperationContext 类为单个操作和通道之间的通信提供上下文。 gRPC操作和通道之间的通信提供上下文。更多

Header: #include <QGrpcOperationContext>
CMake.QGrpcOperationContext find_package(Qt6 REQUIRED COMPONENTS Grpc)
target_link_libraries(mytarget PRIVATE Qt6::Grpc)
Qt 6.7
继承: QObject

公共函数

virtual ~QGrpcOperationContext() override
QByteArrayView argument() const
const QGrpcCallOptions &callOptions() const &
QLatin1StringView method() 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)
void writeMessageRequested(const QByteArray &data)
void writesDoneRequested()

详细说明

QGrpcOperationContext 是在请求远程过程调用(RPC)时在内部构建的,用于调解客户端操作请求与通道操作结果之间的交互。

在客户端接口上请求的 RPC 会返回QGrpcOperation 的特殊化,如QGrpcCallReply,QGrpcServerStream,QGrpcClientStreamQGrpcBidiStream 。这些类与底层的 QGrpcOperationContext 对应类是隐式集成的。

注意: 除非实现自定义通道,否则不要直接使用该类。

该类中包含的信号用于在面向客户端的QGrpcOperationQAbstractGrpcChannel 实现之间建立通信。这些操作本质上是异步的,多个 RPC 可以同时在同一通道上操作。通道通常对所有操作一视同仁,通道有责任正确支持和限制其 RPC 类型所支持的功能子集。

以下信号只能由通道的实现发出:

QGrpcOperation 及其特化将发出的信号有

QAbstractGrpcChannel 的自定义实现必须处理客户端的信号(因为没有提供默认信号处理),并相应地发出自己的信号。

成员函数文档

[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()。

[override virtual noexcept] QGrpcOperationContext::~QGrpcOperationContext()

销毁操作上下文。

[noexcept] QByteArrayView QGrpcOperationContext::argument() const

返回此操作上下文使用的序列化参数。

[noexcept] const QGrpcCallOptions &QGrpcOperationContext::callOptions() const &

返回此操作上下文使用的呼叫选项。

有关全通道选项,请参阅QGrpcChannelOptions

[signal] void QGrpcOperationContext::cancelRequested()

QGrpcOperation 在请求取消通信时发出该信号。

通道应将其取消逻辑连接到该信号,尝试取消 RPC 并以Cancelled 状态代码结束。无法保证取消成功。不需要对从通道接收到的数据进行进一步处理,应避免这样做。

另请参阅 QGrpcOperation::cancel

[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::messageReceivedQGrpcBidiStream::messageReceived

[noexcept] QLatin1StringView QGrpcOperationContext::method() const

返回与此操作上下文相关联的服务的方法名称。

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 &

返回响应信息之前从服务器接收到的初始元数据。

初始元数据由服务器在呼叫建立后立即发送。它可能包括为调用提供上下文的键值对。

注: QGrpcHttp2Channel 将元数据作为 HTTP/2 标头传输。是不区分大小写的 ASCII 字符串。必须避免使用内部前缀:: (伪头信息)、grpc-qtgrpc-可以是 ASCII 字符串或二进制数据。更多信息,请参见RFC 7540 第 8.1.2 节

注: QGrpcOperation 隐式使用此方法。

该函数在 Qt 6.10 中引入。

另请参阅 setServerInitialMetadata()、QGrpcOperation::serverInitialMetadata() 和serverTrailingMetadata()。

[noexcept, until 6.13] const QHash<QByteArray, QByteArray> &QGrpcOperationContext::serverMetadata() const &

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

请使用serverInitialMetadata() 和serverTrailingMetadata() 代替。

返回响应消息之前从服务器收到的初始元数据。

初始元数据由服务器在调用建立后立即发送。它可能包括为调用提供上下文的键值对。

注: QGrpcHttp2Channel 将元数据作为 HTTP/2 标头传输。是不区分大小写的 ASCII 字符串。必须避免使用内部前缀:: (伪头信息)、grpc-qtgrpc-可以是 ASCII 字符串或二进制数据。更多信息,请参见RFC 7540 第 8.1.2 节

注: QGrpcOperation 默示使用此方法。

另请参阅 setServerMetadata()、serverInitialMetadata() 和QGrpcOperation::serverInitialMetadata()。

[noexcept, since 6.10] const QMultiHash<QByteArray, QByteArray> &QGrpcOperationContext::serverTrailingMetadata() const &

返回在所有响应信息之后从服务器接收到的尾随元数据。

尾随元数据仅在所有响应信息发送完毕后、RPC 结束前由服务器发送。它可能包括提供有关已完成调用的附加上下文的键值对。

注: QGrpcHttp2Channel 将元数据作为 HTTP/2 标头传输。键值是不区分大小写的 ASCII 字符串。必须避免使用内部前缀:: (伪头信息)、grpc-qtgrpc-可以是 ASCII 字符串或二进制数据。更多信息,请参见RFC 7540 第 8.1.2 节

注: 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().

[since 6.10] void QGrpcOperationContext::setServerTrailingMetadata(QMultiHash<QByteArray, QByteArray> &&metadata)

设置从服务器收到的所有响应信息后的尾部metadata

此函数在 Qt 6.10 中引入。

另请参阅 serverTrailingMetadata()。

[signal] void QGrpcOperationContext::writeMessageRequested(const QByteArray &data)

QGrpcClientStreamQGrpcBidiStream 已将data 序列化并准备好交付通道时,会发出该信号。

通道应将其写入逻辑连接到该信号,并在将序列化数据写入导线之前用与通道相关的标头对其进行封装。

另请参阅 QGrpcClientStream::writeMessageQGrpcBidiStream::writeMessage

[signal] void QGrpcOperationContext::writesDoneRequested()

该信号由QGrpcClientStreamQGrpcBidiStream 发出,表示它已完成信息写入。通道应对此作出半关闭流的响应。

注意: 收到此信号后,流 RPC 将不再允许写入操作。服务器仍可发送信息,但应使用messageReceived() 进行转发。

另请参见 QGrpcClientStream::writesDoneQGrpcBidiStream::writesDone

© 2025 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.