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 |
const QHash<QByteArray, QByteArray> & | serverMetadata() const & |
QLatin1StringView | service() const |
void | setResponseMetaType(QMetaType metaType) |
void | setServerMetadata(QHash<QByteArray, QByteArray> &&metadata) |
void | setServerMetadata(const QHash<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,QGrpcClientStream 或QGrpcBidiStream 。这些类与底层的 QGrpcOperationContext 对应类是隐式集成的。
注意: 除非实现自定义通道,否则不要直接使用该类。
该类中包含的信号用于在面向客户端的QGrpcOperation 和QAbstractGrpcChannel 实现之间建立通信。这些操作本质上是异步的,多个 RPC 可以同时在同一通道上操作。通道通常对所有操作一视同仁,通道有责任正确支持和限制其 RPC 类型所支持的功能子集。
以下信号只能由通道的实现发出:
QGrpcOperation 及其特化将发出的信号有
QAbstractGrpcChannel 的自定义实现必须处理客户端的信号(因为没有提供默认信号处理),并相应地发出自己的信号。
成员函数文档
void QGrpcOperationContext::setServerMetadata(QHash<QByteArray, QByteArray> &&metadata)
void QGrpcOperationContext::setServerMetadata(const QHash<QByteArray, QByteArray> &metadata)
设置从服务接收的服务器metadata 。
[override virtual noexcept]
QGrpcOperationContext::~QGrpcOperationContext()
销毁操作上下文。
[noexcept]
QByteArrayView QGrpcOperationContext::argument() const
返回此操作上下文使用的序列化参数。
[noexcept]
const QGrpcCallOptions &QGrpcOperationContext::callOptions() const &
返回此操作上下文使用的呼叫选项。
有关全通道选项,请参阅QGrpcChannelOptions 。
[signal]
void QGrpcOperationContext::cancelRequested()
QGrpcOperation 在请求取消通信时发出该信号。
通道应将其取消逻辑连接到该信号,并尝试取消 RPC 并立即返回。无法保证取消成功。不需要对从通道接收到的数据进行进一步处理,应避免这样做。
另请参见 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::messageReceived 和QGrpcBidiStream::messageReceived 。
[noexcept]
QLatin1StringView QGrpcOperationContext::method() const
返回与此操作上下文相关联的服务的方法名称。
QMetaType QGrpcOperationContext::responseMetaType() const
返回 RPC 结果报文的元类型。
另请参阅 setResponseMetaType()。
std::shared_ptr<const QAbstractProtobufSerializer> QGrpcOperationContext::serializer() const
返回此操作上下文的序列化器
[noexcept]
const QHash<QByteArray, QByteArray> &QGrpcOperationContext::serverMetadata() const &
返回从服务器接收到的元数据。
注: QGrpcOperation 对应程序隐式使用此方法。
另请参阅 setServerMetadata().
[noexcept]
QLatin1StringView QGrpcOperationContext::service() const
返回与此操作上下文相关的服务名称。
void QGrpcOperationContext::setResponseMetaType(QMetaType metaType)
存储 RPC 结果信息的metaType 。
另请参阅 responseMetaType()。
[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 。
© 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.