问题标签 [grpc-web]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
1453 浏览

docker - docker容器中的gRPC无法连接到主机上的服务

我稍微修改了这个例子:https ://github.com/grpc/grpc-web/tree/master/net/grpc/gateway/examples/echo 。我在暴露端口 8080 的 docker 容器上运行特使(需要运行此代理服务器,因为浏览器无法直接与后端 gRPC 服务对话)。我在我的本地主机(特使 docker 容器的主机)上运行所有服务。但是,我似乎无法将 docker 容器中的特使连接到主机上运行的服务。

grpc_cli我在容器中编译,当我运行时grpc_cli ls 192.168.1.10:9000(主机的 LAN IP 地址和运行服务的端口),我得到

当我使用 docker0 接口的 IP 地址时,我得到一个几乎相同的错误,它也应该提供到主机的连接。

但是,从主机运行一个简单的 http 服务器, python -m http.server 我可以从容器中运行以下命令:

主机上的客户端(不在容器中)连接并与服务正常工作,因此这不是服务器问题。

docker 会阻止某些类型的流量吗?我注意到在示例中服务器被放置在另一个 docker 容器上,并且它可以工作(它也可以在我本地工作),但我更希望在构建和测试它们时让我的服务在我的主机上运行。是否有设置可以从容器启用 gRPC 到主机上的服务?

Docker 版本 1.13.1,构建 47e2230/1.13.1 Fedora 29

0 投票
1 回答
745 浏览

grpc - Traefik 代理背后的 Java Grpc 服务器

这是我的 traefik 配置

当 js Web 客户端通过 traefik 代理调用 grpc 服务器时,我在服务器端收到此警告

不调用服务方法。

客户得到的 415 (Unsupported Media Type)回应。

特拉菲克1.7.16

grpc-java1.22.1

grpc-web@1.0.6

我错过了什么?谢谢

0 投票
3 回答
12899 浏览

angular - 如何在 gRPC Angular 应用程序中使用 typescript protobuf 生成的文件

总结问题

我正在学习如何使用 gRPC,并想尝试进行客户端-服务器连接。服务器(在 Elixir 中)工作正常,但我遇到了一些问题。但由于我主要是后端开发人员,在 Angular 中实现它时遇到了更多麻烦,希望能得到一些帮助。

我在这个项目中使用Angular 8.2.9Angular CLI 8.3.8Node 10.16.0

我已经做了什么?

  1. 创建了一个新的 Angular cli 项目ng new test-grpc
  2. 使用 生成一个模块和一个组件ng g...,并修改基本路由以具有工作页面和 url。
  3. 安装的 Protobuf 和 gRPC 库npm install @improbable-eng/grpc-web @types/google-protobuf google-protobuf grpc-web-client protoc ts-protoc-gen --save
  4. .proto从我的 Elixir 代码中获取文件并将其复制到文件夹中src/proto
  5. protoc在 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"
  6. 调用命令生成在和中找到的js和tssrc/app/proto-ts文件src/app/proto-js
  7. 在生成的文件的名称中_替换为任何。-
  8. 然后我尝试在 ngOnInit 中添加以下代码:https://github.com/improbable-eng/grpc-web/tree/master/client/grpc-web#usage-overview例如:

我试过了:

  • 在构造函数参数中创建请求。
  • 找到如何添加打字稿文件(我只找到在角度项目中添加javascript文件的方法,生成的javascript比打字稿重得多,没有任何解释)。
  • 要了解 jspb.Message 是什么(我仍然不知道,但我认为它链接到这个文件:https ://github.com/protocolbuffers/protobuf/blob/master/js/message.js )
  • 试图找到有关如何在 Angular 应用程序中实现 rGPD 的教程(404 未找到)

.proto 文件、两个 typescript 生成的文件以及尝试使用它们的组件

.proto 文件():

打字稿生成的代码(2个文件):

尝试在组件文件中使用它们:

预期结果和实际结果

我希望能够在组件(或服务)中使用非角度打字稿代码。 由于生成了上面的代码(但组件文件),它不应该被修改,因为对.proto文件的任何更改都会覆盖在这两个生成的文件中所做的任何修改。

现在,我被这两条错误消息阻止了,这取决于我最后保存的文件TypeError: _proto_ts_user_pb_d__WEBPACK_IMPORTED_MODULE_4__.ListUsersRequest is not a constructor:(如果我最后保存了 protobuf 生成的文件,控制台中没有错误)或src\app\proto-ts\user-pb-service.d.ts and src\app\proto-ts\user-pb.d.ts is missing from the TypeScript compilation. Please make sure it is in your tsconfig via the 'files' or 'include' property.(如果我最后保存了 angular 文件,同样的错误控制台中的消息)。

在中添加“文件”或“包含” tsconfig.json(这是由 Angular CLI 生成的,未经任何修改)会产生另一个错误:Refused to load the image 'http://localhost:4200/favicon.ico' because it violates the following Content Security Policy directive: "default-src 'none'". Note that 'img-src' was not explicitly set, so 'default-src' is used as a fallback.

0 投票
1 回答
5068 浏览

python - gRPC Web 服务器返回“找不到方法”

我用 Python 编写了一个测试 gRPC 服务器,并在 ReactJS (ES6) 上编写了客户端。它是一个简单的 python gRPC 服务器,为客户端提供身份验证方法。还配置了 EnvoyProxy 用于将 HTTP 请求传输到 HTTP2。当我从客户端调用 gRPC 方法时,我得到{"code": 12, "message": "Method not found"}.

状态代码文档中,此错误描述为未实现的方法:

grpc 状态码文档

但我确定该方法已实现!

这是我的一些 Python 服务代码:

我尝试从 python 客户端调用 gRPC 方法,它按预期工作:

我的特使 YAML 配置:

ReactJS 客户端代码:

我希望输出是我的令牌响应,但实际输出是:

grpc-web 客户端响应

包.json:

0 投票
1 回答
3371 浏览

grpc - 如何在 grpc-web 中使用 grpc 流式传输?

我想从 React 客户端向服务器发送文件。我知道为此我应该使用 grpc 流并将文件拆分成块。那么,问题是如何将这些块发送到服务器?

0 投票
1 回答
763 浏览

envoyproxy - 如何从 NodeJS 服务器调用 grpc-web 代理

我正在运行实现服务接口的 gRPC 服务器和允许客户端连接的 Envoy 代理,health.js使用 webpack 构建并引用dist/main.js到 HTML 文件中的以下 js 代码(文件)进行成功调用,它的工作

我想在NodeJS服务器而不是浏览器中执行此功能,实际上执行命令node health.js时发生以下错误

0 投票
0 回答
322 浏览

typescript - 将 Jest 与 gRPC-Web 一起使用

我们在我们的项目中使用 gRPC-Web 客户端,但是当我们尝试对导入生成的 gRPC 类的代码运行单元测试时,我们得到一个错误

TypeError:无法读取未定义的属性“导航器”。

我猜这个问题在某种程度上与生成的模块的暴露方式有关,但是我不知道如何使它与 Jest 一起工作。

我尝试global.navigator使用文件手动模拟对象setupTests.js,但没有帮助。看起来 gRPC 代码在 Jest 之前执行。

我们的 Web 项目是使用带有 TypeScript 的Create React App库创建的,不会弹出,我们使用默认的 Jest 配置来运行单元测试。

请指教。

0 投票
1 回答
3659 浏览

sh - Protobuf Build Protoc 选择目录中的所有 .proto 文件

我运行以下.sh文件来构建我的原型。

它工作得很好,但是,我的团队可能会将其他目录添加到protos该文件看不到的目录中。

有没有办法让我更新这个脚本来获取.proto目录中的所有文件protos

我尝试了以下方法,但没有奏效:

我确定这只是一些语法问题,但我不知道该怎么做。

编辑:

我已经实现了一些东西来使我的生成器更加灵活,但它仍然很混乱:

0 投票
1 回答
5740 浏览

c# - gRPC c# 文件下载/上传 + Web 客户端

主要问题:

我正在寻找一种解决方案来提高大文件的上传/下载速度。我听说过相对较新的技术 gRPC。我知道服务器到服务器的通信有好处,例如微服务架构。

客户

但是,我需要前端(浏览器)上的文件上传/下载组件(例如Fine 上传器、jQuery 文件上传插件、 Resumable.js 等)并支持 gRPC。我可以自己做支持。但我不知道如何以及什么以及是否有可能。所以我需要一个例子或一个建议或指向正确的方向。无论 JS 方面:vanilla、react、angular ...

服务器端

  • c# 更可取
  • node.js 可能
  • java 可行的

对该主题进行的研究

请帮助或至少说这是不可能的

0 投票
2 回答
952 浏览

reactjs - 如何使用 grpc-web 构建 react-redux 应用程序?

我有一个react-redux应用程序,我的团队使用grpc-web。我想知道 - 设计这种系统的最佳方法是什么?

目前计划是创建 3 个抽象级别:

  1. APIgrpc-web模块 -客户周围的承诺包装器
  2. Redux thunkslevel - 处理 API 的异步操作创建者
  3. React components props- 将只询问组件需要什么

所以components一无所知grpc,他们与动作创建者混为一谈,动作创建者一无所知grpc,他们处理一个api模块,并且只有api模块与grpc-web存根一起使用。

我想走这条路的原因:

  • 动作创建者和组件中没有特定于 grpc 的代码
  • 我的基于 Promise 的 API 而不是 grpc-web 的基于回调的 API

我的问题是:

  1. 在 Redux 和 grpc-web 之间有一个抽象级别是个好主意吗?或者最好将这些东西保留在动作创建者的逻辑中?
  2. 我应该考虑一个通用的设计模式吗?(我在考虑“适配器”)
  3. grpc-web承诺API是个好主意吗?如果是的话,编写一个函数并即时执行是个好主意吗?
  4. 我可以说我目前的计划是适配器模式吗?
  5. 如果我想使用适配器模式,我是否必须将数据收集的每个元素映射到我自己的接口?我知道我的组件(可能还有动作创建者)不应该依赖grpc-webAPI,因为这个 API 将来可能会改变