微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么服务器上收到的gRPC截止日期与客户端发送的gRPC截止日期不同

如何解决为什么服务器上收到的gRPC截止日期与客户端发送的gRPC截止日期不同

我正在使用gRPC csharp实现使两个服务相互通信。

从客户拨打电话时,我设置了最后期限。 在服务器上接到电话时,我正在阅读截止日期。 令我惊讶的是,截止日期值并不相同,相差不到一秒钟。

gRPC文档说,截止日期是fixed point in time。因此,我希望在服务器上收到相同的值,但事实并非如此。

我可以看到它提到了100ns的四舍五入,但就我而言,它还有很多。

可以解释飞行时间吗?我找不到这样的逻辑,这会违反固定时间点的概念。

gRPC source code中的gRPC内部Timespec和c#DateTime之间进行转换时是否存在错误

示例(伪)代码

// client:

var serviceClient = new ServiceClient(new Channel("address","port",ChannelCredentials.Insecure));
var deadline = DateTime.UtcNow;
Console.WriteLine(deadline.ToString("O"));
serviceClient.SendAsync(request,new CallOptions(null,deadline));

// server:

public override async Task Send(SendRequest request,ServerCallContext context)
{
    Console.WriteLine(context.Deadline.ToString("O"));
}

控制台输出为:

2020-09-22T14:14:20.8359860Z for client

2020-09-22T14:14:21.2910442Z for服务器

解决方法

gRPC库的行为符合预期。在本地位于服务器/客户端上时,RPC到期时间表示为截止期限,而在在线上发送RPC时,时间戳在内部转换为超时(然后由对等方接收后转换回截止期限)。调整客户端/服务器之间的时钟偏斜是必要的(否则,如果服务器上的时间稍微过了一点,将会与RPC的预期到期时间混淆)。

有关网上传输的内容,请参见https://github.com/grpc/grpc/blob/master/doc/PROTOCOL-HTTP2.md(查找“超时”)。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。