Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用gRPC共享非常大的文件_C#_Grpc - Fatal编程技术网

C# 使用gRPC共享非常大的文件

C# 使用gRPC共享非常大的文件,c#,grpc,C#,Grpc,我想使用gRPC在端点和服务器之间共享非常大的文件(超过6gb) 这是一个合适的解决方案吗? 我有什么选择 我工作的公司有一个应用程序,它被分隔在多个相互不知道的端点中,它们使用RabbitMQ和发布/订阅模式进行对话。 因为RabbitMQ对每条消息都有4gb的限制,所以我不能直接使用它,我需要实现一个外部微服务 我的想法是将这个系统与一个微服务集成在一起,发送者可以上传一个大附件并接收一个密钥。然后将密钥插入要发送的实际消息中。然后,接收者可以使用消息中的密钥从微服务下载附件副本 如果你真的

我想使用gRPC在端点和服务器之间共享非常大的文件(超过6gb)

这是一个合适的解决方案吗? 我有什么选择

我工作的公司有一个应用程序,它被分隔在多个相互不知道的端点中,它们使用RabbitMQ和发布/订阅模式进行对话。 因为RabbitMQ对每条消息都有4gb的限制,所以我不能直接使用它,我需要实现一个外部微服务


我的想法是将这个系统与一个微服务集成在一起,发送者可以上传一个大附件并接收一个密钥。然后将密钥插入要发送的实际消息中。然后,接收者可以使用消息中的密钥从微服务下载附件副本

如果你真的想在gRPC上实现这一点,那么关键是让响应成为“服务器流”,这样它就不会在一个数据块中返回6GiB,而是返回多个你需要的大小的数据块,例如一次可能返回128kiB(或其他);你可以这样做,比如:

syntax=“proto3”;
消息文件请求{
字符串id=1;//或其他
}
消息文件响应{
bytes chunk=1;//文件的某些段
}
服务搜索服务{
rpc GetFile(FileRequest)返回(streamfileresponse);
}
但是没有什么是自动的:现在你的工作就是写回多个片段


我怀疑一个普通的http下载风格的响应可能更简单

简单地提供一个下载链接怎么样?http服务器从一开始就处理大量下载,为什么要在这里重新发明轮子?gRPC很有用,但它不能解决巨大带宽问题;我是说。。。当然,你可以使用gRPC术语中的块流,但是。。。常规的普通http下载似乎简单得多巨大的带宽问题是一个大问题,但我也读到过,gRPC在文件大于2gb的情况下不会进行优化,但除了在论坛上发表一篇帖子外,我没有找到任何其他相关内容。有人知道吗?顺便说一句,我忘了说我需要使用一种安全的方式来传输这个文件,比如使用SSL。@MarcoFiorillo gRPC可以在TLS内部工作;这不是一个问题——如果你真的想使用gRPC,你可以让它成为一个“服务器流”方法,以单独的块返回文件的多个段,而不是一个单一的一元响应;这就是你想要的吗?要添加到答案中,下载端(调用者)必须手动聚合流数据块。。。Grpc保证按顺序重播,因此无需发送区块索引。最近,我提议对grpc和grpc web项目的文件传输协议消息进行标准化。也许更广泛的社区会帮助实现这一点。谢谢你的回答,但如果你有其他选择,我想评估一下。我还评估了TCP客户端+SSL流,但我也评估了HTTP下载响应!谢谢,我以为有某种自动化可以将所有的chuck合并在一起。你能给我一个链接或者更多关于“http下载风格响应”的信息吗?Thanks@MarcoFiorillo我的意思是常规http[s]-只是:与文件传输的方式相同,已经传输了好几十年了对不起,我以为你说的是基于http(s)的框架。