尝试编译我的原型 - 我需要编译它们以在我的反应应用程序中使用。但我收到这个错误。我运行命令如下:
cd src/main/proto && protoc -I=. *.proto --js_out=import_style=commonjs:. --grpc-web_out=import_style=commonjs,mode=grpcwebtext:.
Run Code Online (Sandbox Code Playgroud)
在哪里可以找到 protoc-gen-js?我没有遇到任何回购。
我可以成功运行gRPC client,并gRPC server在c++现在我希望建立节点A和GRPC服务器即之间的通信node B的连接形象.
我可以参考下面的任何例子是我正在寻找的.
我有这个节点A带http消息(GET方法)我需要解析,即提取消息并在节点C上运行请求.我应该在节点A和gRPC服务器之间寻找什么.
提前致谢
我正在学习如何使用 gRPC,并想尝试进行客户端-服务器连接。服务器(在 Elixir 中)可以工作,但我遇到了一些问题。但由于我主要是一名后端开发人员,我在 Angular 中实现它时遇到了更多的麻烦,希望得到一些帮助。
我在这个项目中使用Angular 8.2.9、Angular CLI 8.3.8和Node 10.16.0。
ng new test-grpcng g...,并修改基本路由以具有工作页面和 url。npm install @improbable-eng/grpc-web @types/google-protobuf google-protobuf grpc-web-client protoc ts-protoc-gen --save.proto从我的 Elixir 代码中取出文件并将其复制到一个文件夹中src/protoprotoc在 package.json 中添加了一条命令scripts:
"protoc": "protoc --plugin=protoc-gen-ts=./node_modules/.bin/protoc-gen-ts.cmd --js_out=import_style=commonjs,binary:src/app/proto-gen --ts_out=service=true:src/app/proto-ts -I ./src/proto/ ./src/proto/*.proto"src/app/proto-ts和src/app/proto-js_与-所生成的文件的名称。所以我有一个使用Tonic crate用 Rust 编写的 gRPC 服务器。我已经编写了所有原型文件,并且可以使用基于 Tonic 的客户端和grpcurl发出请求,因此服务器端没有问题。
\n我有一个基于 Unity 3D 的游戏,我想将其用作客户端。Unity 使用 C#/.NET/Mono,因此理论上应该很容易让 gRPC 客户端工作。事实证明这并不那么容易。
\n根据互联网(特别是https://grpc.io/blog/grpc-csharp-future/),我们应该使用Grpc.Net.Client包。因此,我使用非常有用的NuGetForUnity工具将其放入 Unity 中。
\n我收到以下错误,至少信息非常丰富
\n\n\nPlatformNotSupportedException:gRPC 需要在不支持 HTTP/2 上的 gRPC 的 .NET 实现上进行额外配置。必须使用 GrpcChannelOptions.HttpHandler 指定 HTTP 提供程序。配置的 HTTP 提供程序必须支持 HTTP/2 或配置为使用 gRPC-Web。有关详细信息,请参阅https://aka.ms/aspnet/grpc/netstandard。
\n
经过一番谷歌搜索后,我发现了以下链接,这些链接清楚地表明 Unity/Xamarin 和其他链接不支持 Grpc.Net.Client。
\nhttps://github.com/grpc/grpc-dotnet/issues/1309#issuecomment-850303082
\nhttps://learn.microsoft.com/en-us/aspnet/core/grpc/netstandard?view=aspnetcore-6.0
\n总之:
\n\n\n …不支持 HTTP/2 的 .NET 实现(例如 UWP、Xamarin 和 Unity)可以使用 gRPC-Web 作为替代方案。
\n
gRPC 基于 HTTP/2,它(假设)被浏览器广泛支持。因此,我觉得浏览器中的 gRPC 应该没有问题。
但是,很明显存在问题。协议grpc web是不同的,因为“由于浏览器限制”而存在。还有许多博客文章描述了部署复杂的技术堆栈以使 gRPC 从浏览器工作。
我错过了实际问题 - 为什么 gRPC 不能简单地在浏览器中工作?
我正在玩grpc& grpc-web。我能够运行一个简单的 grpc 服务器和 grpc-web 应用程序。但是我觉得设置需要太多依赖项web-server,grpc-server并且envoy proxy。
有人成功用于grpc-web生产吗?我们需要包括特使在内的所有依赖项吗?
.NET Core gRPC-Web 客户端在 http://localhost:5000 上调用 ASP.NET Core gRPC-Web 服务器工作正常。
使用虚拟应用程序(例如“http://build.mycompany.ca/myapp”)调用部署到 IIS 服务器的服务器的相同客户端代码会导致
状态(StatusCode =“未实现”,详细信息=“错误的gRPC响应。HTTP状态代码:404”)
我的 ASP.NET Core 3.1 服务器设置正确。即 app.UseGrpcWeb(new GrpcWebOptions { DefaultEnabled = true });
介于两者之间
app.UseRouting()
Run Code Online (Sandbox Code Playgroud)
和
app.UseEndpoints(endpoints => {
endpoints.MapControllers();
endpoints
.MapGrpcService<GrpcClientService>()
.EnableGrpcWeb();
});
Run Code Online (Sandbox Code Playgroud)
我在这里缺少什么想法吗?
我有一个react-redux应用程序,我的团队使用grpc-web。我想知道 - 设计这种系统的最佳方法是什么?
目前的计划是创建 3 个抽象级别:
API模块 -grpc-web客户端周围的promisified包装器Redux thunks level - 处理 API 的异步动作创建者React components props - 只会询问组件需要什么所以components一无所知grpc,他们与动作创建者混在一起,动作创建者一无所知grpc,他们处理一个api模块,并且只有api模块与grpc-web存根一起使用。
我想走这条路的原因:
我的问题是:
grpc-webAPI是个好主意吗?如果是,编写一个函数并即时执行是否是个好主意?grpc-webAPI,因为这个 API 将来可能会改变我在 Angular 通用应用程序中设置 GRPC 时遇到问题。
基本上,它会抛出一个错误:
ERROR Error: This environment's XHR implementation cannot support binary transfer.
Run Code Online (Sandbox Code Playgroud)
这个错误正在破坏生产中的应用程序(将其托管在 ubuntu 和 nginx 上),但是在本地环境中它可以工作。
如果我将 Angular 切换为不使用 SSR,那么它就可以正常工作。
我的假设是在 Node Express 服务器中我需要添加对 GRPC 的支持,但我不确定如何实现这一点。
有人遇到同样的问题吗?
谢谢!
grpc-web ×10
grpc ×9
angular ×2
asp.net-core ×1
c# ×1
c++ ×1
envoyproxy ×1
http ×1
node.js ×1
protobuf.js ×1
protoc ×1
reactjs ×1
redux ×1
rust ×1
typescript ×1