gRPC 通道在 C# 中保持打开状态

  • 本文关键字:状态 通道 gRPC grpc
  • 更新时间 :
  • 英文 :


I0804 13:52:46.505722 0 C:jenkinsworkspacegRPC_build_artifactsplatformwindowsworkspace_csharp_ext_windows_x86srccorelibsurfacecall.c:1802: grpc_call_start_batch(call=05BEFFD8, ops=05EFED58, nops=6, tag=05BC64E0, reserved=00000000) I0804 13:52:46.505722 0 C:jenkinsworkspacegRPC_build_artifactsplatformwindowsworkspace_csharp_ext_windows_x86srccorelibsurfacecall.c:1445: ops[0]: SEND_INITIAL_METADATA(nil) I0804 13:52:46.505722 0 C:jenkinsworkspacegRPC_build_artifactsplatformwindowsworkspace_csharp_ext_windows_x86srccorelibsurfacecall.c:1445: ops[1]: SEND_MESSAGE ptr=05BDAFD0 I0804 13:52:46.505722 0 C:jenkinsworkspacegRPC_build_artifactsplatformwindowsworkspace_csharp_ext_windows_x86srccorelibsurfacecall.c:1445: ops[2]: SEND_CLOSE_FROM_CLIENT I0804 13:52:46.505722 0 C:jenkinsworkspacegRPC_build_artifactsplatformwindowsworkspace_csharp_ext_windows_x86srccorelibsurfacecall.c:1445: ops[3]: RECV_INITIAL_METADATA ptr=05BC64FC I0804 13:52:46.505722 0 C:jenkinsworkspacegRPC_build_artifactsplatformwindowsworkspace_csharp_ext_windows_x86srccorelibsurfacecall.c:1445: ops[4]: RECV_MESSAGE ptr=05BC6508 I0804 13:52:46.505722 0 C:jenkinsworkspacegRPC_build_artifactsplatformwindowsworkspace_csharp_ext_windows_x86srccorelibsurfacecall.c:1445: ops[5]: RECV_STATUS_ON_CLIENT metadata=05BC650C status=05BC6518 details=05BC651C

我很困惑为什么当我认为 TCP 连接保持打开状态时,gRPC 会在调用之间SEND_CLOSE_FROM_CLIENT记录一条消息。

本质上,我只有一个带有构造函数的随机类,该构造函数打开到 gRPC 服务器的客户端通道。 在对此类调用的方法中,内部有一个循环,每次迭代都调用 RPC 方法。 但是,它非常慢,我认为这是因为每次尝试进行 RPC 调用时它都会创建连接。

如何保持连接打开? 这是双工流的情况吗?

SEND_CLOSE_FROM_CLIENT是由gRPC C核心库定义的原语,在HTTP/2术语中表示"半关闭"(它通知客户端已完成流式RPC中的请求发送 - 其中每个RPC与HTTP/2流1:1对应;一元调用只是流调用的特例(。

SEND_CLOSE_FROM_CLIENT与关闭TCP连接无关(我认为您在没有先阅读线路协议和HTTP2的情况下太快得出结论 https://github.com/grpc/grpc/blob/master/doc/PROTOCOL-HTTP2.md(

最新更新