我最近使用gRPC
与proto3
,我已经注意到,required
并optional
在新的语法已被删除.
有人会解释为什么在proto3中删除了必需/可选项?这样的约束似乎对于使定义具有鲁棒性是必要的.
语法proto2:
message SearchRequest {
required string query = 1;
optional int32 page_number = 2;
optional int32 result_per_page = 3;
}
Run Code Online (Sandbox Code Playgroud)
语法proto3:
syntax = "proto3";
message SearchRequest {
string query = 1;
int32 page_number = 2;
int32 result_per_page = 3;
}
Run Code Online (Sandbox Code Playgroud) proto3中的rpc语法是否允许空请求或响应?
例如,我想要相当于以下内容:
rpc Logout;
rpc Status returns (Status);
rpc Log (LogData);
Run Code Online (Sandbox Code Playgroud)
或者我应该只创建一个null类型?
message Null {};
rpc Logout (Null) returns (Null);
rpc Status (Null) returns (Status);
rpc Log (LogData) returns (Null);
Run Code Online (Sandbox Code Playgroud) 传输层如何工作?如果它在网络上......为什么它被称为RPC?更重要的是,这与为服务层实现API的REST有何不同(客户端中的类具有发出http请求的方法)?
目标是引入更好的延迟和网络吞吐量的传输和应用层协议.目前,该应用程序使用REST与HTTP/1.1,我们遇到高延迟.我需要解决这个延迟问题,我可以使用gRPC(HTTP/2)或REST/HTTP2.
HTTP/2:
我知道上述所有优点.问题1:如果我使用REST/HTTP/2,我相信,与使用HTTP/1.1的REST相比,我将获得显着的性能提升,但这与gRPC(HTTP/2)相比如何?
我也知道gRPC使用proto buffer,这是用于在线路上传输结构化数据的最佳二进制序列化技术.Proto缓冲区还有助于开发一种与语言无关的方法.我同意这一点,我可以使用graphQL在REST中实现相同的功能.但我关注的是序列化问题:问题2:当HTTP/2实现这个二进制特性时,使用proto缓冲区是否在HTTP/2之上提供了额外的优势?
问题3:在流媒体,双向用例方面,gRPC(HTTP/2)如何与(REST和HTTP/2)进行比较?
有这么多的博客/视频出在与像(REST和HTTP/1.1)比较GRPC(HTTP/2)互联网这个.如前所述,我想知道比较GRPC(HTTP/2)和(REST与HTTP/2)的差异和好处.
我们想为我们的gRPC微服务构建一个Javascript/HTML gui.由于浏览器端不支持gRPC,我们考虑使用web-socket连接到node.js服务器,该服务器通过grpc调用目标服务.我们很难找到一个优雅的解决方案来做到这一点.特别是,因为我们使用gRPC流来推动我们的微服务之间的事件.似乎我们需要第二个RPC系统,只是为了在前端和node.js服务器之间进行通信.这似乎是很多开销和必须维护的额外代码.
有没有人有这方面的经验,或者知道如何解决这个问题?
我尝试了解protobuf和gRPC以及如何使用它们.你能帮我理解一下:
我已经知道 - 或者假设我这样做 - 那:
对于已经使用该技术的人,我再次认为这是一个简单的问题.我仍然会感谢你对我有耐心并帮助我.我也非常感谢网络深入研究这些技术.
我想以双向流方式开发客户端 - 服务器应用程序.
什么是更合适的技术 - grpc或websocket?
我想比较一下grpc与zeromq及其模式的某些功能:我想创建一些比较(功能集) - 不知何故 - 0mq是"更好"的套接字 - 但无论如何 - 如果我应用0mq模式 - 我得到可比的'框架'我认为 - 这里0mq似乎更灵活......
主要要求是:
有任何想法吗?
谢谢!
有没有任何使用gRPC和Spring Boot的例子或想法的人?
在我的 Windows 机器上使用 pip install grpcio 安装 grpcio 时出现错误。我在这里阅读 - https://github.com/grpc/grpc/issues/17829,这可能是由于 setuptools 版本中的错误。我将我的 setuptools 升级到最新版本,即 41.0.1 。仍然得到相同的构建错误。它不会发生在任何其他包中。我试过在我的笔记本电脑上重新安装 pip 和 python。我附上我的错误
Building wheels for collected packages: grpcio
Building wheel for grpcio (setup.py) ... error
ERROR: Complete output from command 'c:\python27\python.exe' -u -c 'import setuptools, tokenize;__file__='"'"'c:\\users\\s\\appdata\\local\\temp\\pip-install-ge5zhq\\grpcio\\setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' bdist_wheel
-d 'c:\users\s\appdata\local\temp\pip-wheel-txjhlh' --python-tag cp27:
ERROR: Found cython-generated files...
running bdist_wheel
running build
running build_py
running build_project_metadata
creating python_build
creating python_build\lib.win-amd64-2.7
creating python_build\lib.win-amd64-2.7\grpc
copying src\python\grpcio\grpc\_auth.py -> python_build\lib.win-amd64-2.7\grpc
copying src\python\grpcio\grpc\_channel.py -> …
Run Code Online (Sandbox Code Playgroud) grpc ×10
rest ×3
http2 ×2
build ×1
http ×1
javascript ×1
messaging ×1
networking ×1
node.js ×1
proto3 ×1
python-2.7 ×1
rpc ×1
spring ×1
spring-boot ×1
websocket ×1
zeromq ×1