Questions tagged «grpc»

最初由Google开发的基于HTTP / 2的通用RPC(远程过程调用)框架。gRPC是语言无关和平台无关的框架,允许用户编写应用程序,在这些应用程序中独立服务可以像本机服务一样相互配合。它使用协议缓冲区作为接口描述语言。

2
为什么在协议缓冲区3中删除了必需和可选的内容
我最近gRPC与proto3和一起使用,并且注意到了这一点,required并且optional已在新语法中将其删除。 有人可以解释一下为什么在proto3中删除了必需/可选吗?此类约束似乎对于使定义更健壮很有必要。 语法proto2: message SearchRequest { required string query = 1; optional int32 page_number = 2; optional int32 result_per_page = 3; } 语法proto3: syntax = "proto3"; message SearchRequest { string query = 1; int32 page_number = 2; int32 result_per_page = 3; }

3
我可以使用空请求或响应定义grpc调用吗?
proto3中的rpc语法是否允许空请求或响应? 例如,我想要以下内容: rpc Logout; rpc Status returns (Status); rpc Log (LogData); 还是我应该创建一个空类型? message Null {}; rpc Logout (Null) returns (Null); rpc Status (Null) returns (Status); rpc Log (LogData) returns (Null);

3
protobuf与gRPC
我尝试了解protobuf和gRPC以及如何使用两者。您能帮我了解以下内容吗? 考虑到OSI模型,例如Protobuf在第4层在哪里? 通过消息传递来思考“流”是什么,gRPC在做protobuf遗漏的事情是什么? 如果发送者使用protobuf,则服务器可以使用gRPC还是gRPC添加仅gRPC客户端可以提供的内容? 如果gRPC可以使同步和异步通信成为可能,那么Protobuf仅用于编组,因此与状态无关-是对还是错? 我可以在通信的前端应用程序中使用gRPC而不是REST或GraphQL吗? 我已经知道-或假设我知道- 原虫 用于数据交换的二进制协议 由Google设计 在客户端和服务器上使用生成的“结构”(如描述)来取消/编组消息 gRPC 使用protobuf(v3) 再次来自Google RPC调用框架 也使用HTTP / 2 可以进行同步和异步通讯 对于已经使用该技术的人,我再次假定这是一个简单的问题。我仍然要感谢您对我耐心等待并帮助我。我也非常感谢网络对这些技术的深入研究。

3
GRPC与REST有何不同?
我正在阅读有关GRPC的解释,此图很有趣: 传输层如何工作?如果通过网络...为什么将其称为RPC?更重要的是,这与为服务层(客户端中具有发出http请求的方法的类)实现API的REST有何不同?
98 rest  grpc 

2
gRPC(HTTP / 2)是否比使用HTTP / 2的REST更快?
目标是引入一种传输和应用程序层协议,该协议的延迟和网络吞吐量都更好。当前,该应用程序将REST与HTTP / 1.1结合使用,并且我们遇到了高延迟。我需要解决此延迟问题,并且愿意使用gRPC(HTTP / 2)或REST / HTTP2。 HTTP / 2: 多路复用 单TCP连接 二进制而不是文本 标头压缩 服务器推送 我知道上述所有优点。问题1:我可以肯定,如果我将REST与HTTP / 2一起使用,与使用HTTP / 1.1的REST相比,我将获得显着的性能提升,但是与gRPC(HTTP / 2)相比又如何呢? 我也知道gRPC使用原始缓冲区,这是在网络上传输结构化数据的最佳二进制序列化技术。Proto缓冲区还有助于开发不可知的语言方法。我同意这一点,并且可以使用graphQL在REST中实现相同的功能。但是我担心的是序列化:问题2:当HTTP / 2实现此二进制功能时,使用原型缓冲区是否能在HTTP / 2之上带来更多优势? 问题3:在双向流传输用例方面,gRPC(HTTP / 2)与(REST和HTTP / 2)相比如何? 有这么多的博客/视频出像比较GRPC(HTTP / 2)(REST和HTTP / 1.1)互联网这个。如前所述,我想知道在比较GRPC(HTTP / 2)和(REST与HTTP / 2)方面的区别和好处。

8
如何将gRPC定义的API引入网络浏览器
我们想为我们的gRPC-microservices构建一个Javascript / HTML gui。由于浏览器端不支持gRPC,因此我们考虑使用Web套接字连接到node.js服务器,该服务器通过grpc调用目标服务。我们很难找到一个完美的解决方案来做到这一点。特别是,由于我们使用gRPC流在微服务之间推送事件。似乎我们需要第二个RPC系统,仅用于在前端和node.js服务器之间进行通信。这似乎有很多开销,必须维护其他代码。 有没有人有做过这样的事情的经验或有解决办法的想法?



1
如何从C#类生成.proto文件或使用“代码优先gRPC”?
我想在ASP.NET Core Web应用程序中将gRPC与.NET Core 3一起使用。如何从现有的C#类和模型对象生成必要的.proto文件?我不想重写反映现有代码的.proto文件,而是希望从类和模型对象自动生成.proto文件。 我调用此方法来注册我的服务类。 builder.MapGrpcService<MyGrpcService>(); public class MyGrpcService { public Task<string> ServiceMethod(ModelObject model, ServerCallContext context) { return Task.FromResult("It Worked"); } } ModelObject具有[DataContract]和[DataMember]具有订单属性。 这可能吗?我在网上看到的每个示例都以.proto文件开头。我已经在MyGrpcService该类中定义了所需的服务方法。但这也许只是标准的做事方式的倒退... 像旧的.NET远程处理之类的东西非常理想,您可以从远程端点请求一个接口,并且它神奇地用于gRPC来回通信,但这也许太简单了。

3
GRPC:在Java / Scala中制作高吞吐量客户端
我有一项可以以很高的速率传输邮件的服务。 目前,它由akka-tcp提供服务,每分钟发送350万条消息。我决定尝试一下grpc。不幸的是,它导致吞吐量大大降低:每分钟约50万条消息甚至更低。 您能推荐如何优化它吗? 我的设定 硬件:32核,24Gb堆。 grpc版本:1.25.0 消息格式和端点 消息基本上是一个二进制blob。客户端将100K-1M和更多消息流传输到同一请求中(异步),服务器不响应任何内容,客户端使用无操作观察者 service MyService { rpc send (stream MyMessage) returns (stream DummyResponse); } message MyMessage { int64 someField = 1; bytes payload = 2; //not huge } message DummyResponse { } 问题:与akka实施相比,消息速率低。我观察到CPU使用率较低,因此我怀疑grpc调用实际上在内部阻塞,尽管它另有说明。onNext()确实不会立即返回调用,但表上也有GC。 我试图产生更多的发件人来缓解此问题,但并没有太大的改进。 我的发现 Grpc在序列化每个消息时实际上分配了一个8KB的字节缓冲区。请参阅堆栈跟踪: java.lang.Thread.State:在com.google.common.io.ByteStreams.copy(ByteStreams.java:com.google.common.io.ByteStreams.createBuffer(ByteStreams.java:58)处处于阻塞状态(在对象监视器上): 105)在io.grpc.internal.MessageFramer.writeToOutputStream(MessageFramer.java:274)在io.grpc.internal.MessageFramer.writeKnownLengthUncompressed(MessageFramer.java:230)在io.grpc.internal.MessageFramer.writeUncompressed(MessageFramer.java :168)位于io.grpc.internal.MessageFramer.writePayload(MessageFramer.java:141)位于io.grpc.internal.AbstractStream.writeMessage(AbstractStream.java:53)位于io.grpc.internal.ForwardingClientStream.writeMessage(ForwardingClientStream。 java:37)位于io.grpc.internal.DelayedStream.writeMessage(DelayedStream.java:252)位于io.grpc.internal。io.grpc.internal.ClientCallImpl.sendMessage(ClientCallImpl.java:457)的io.grpc.ForwardingClientCall.sendMessage(ForwardingClientCall.java:37)的io.grpc.internal.ClientCallImpl.sendMessageInternal(ClientCallImpl.java:473)io.grpc.ForwardingClientCall.sendMessage的(ForwardingClientCall.java:37)位于io.grpc.stub.ClientCalls $ CallToStreamObserverAdapter.onNext(ClientCalls.java:346) 对于构建高吞吐量grpc客户的最佳做法的任何帮助,均表示赞赏。
9 java  scala  grpc 
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.