问题标签 [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.
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
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
我错过了什么?谢谢
angular - 如何在 gRPC Angular 应用程序中使用 typescript protobuf 生成的文件
总结问题
我正在学习如何使用 gRPC,并想尝试进行客户端-服务器连接。服务器(在 Elixir 中)工作正常,但我遇到了一些问题。但由于我主要是后端开发人员,在 Angular 中实现它时遇到了更多麻烦,希望能得到一些帮助。
我在这个项目中使用Angular 8.2.9、Angular CLI 8.3.8和Node 10.16.0。
我已经做了什么?
- 创建了一个新的 Angular cli 项目
ng new test-grpc
- 使用 生成一个模块和一个组件
ng g...
,并修改基本路由以具有工作页面和 url。 - 安装的 Protobuf 和 gRPC 库
npm install @improbable-eng/grpc-web @types/google-protobuf google-protobuf grpc-web-client protoc ts-protoc-gen --save
.proto
从我的 Elixir 代码中获取文件并将其复制到文件夹中src/proto
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"
- 调用命令生成在和中找到的js和ts
src/app/proto-ts
文件src/app/proto-js
- 在生成的文件的名称中
_
替换为任何。-
- 然后我尝试在 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.
python - gRPC Web 服务器返回“找不到方法”
我用 Python 编写了一个测试 gRPC 服务器,并在 ReactJS (ES6) 上编写了客户端。它是一个简单的 python gRPC 服务器,为客户端提供身份验证方法。还配置了 EnvoyProxy 用于将 HTTP 请求传输到 HTTP2。当我从客户端调用 gRPC 方法时,我得到{"code": 12, "message": "Method not found"}
.
在状态代码文档中,此错误描述为未实现的方法:
但我确定该方法已实现!
这是我的一些 Python 服务代码:
我尝试从 python 客户端调用 gRPC 方法,它按预期工作:
我的特使 YAML 配置:
ReactJS 客户端代码:
我希望输出是我的令牌响应,但实际输出是:
包.json:
grpc - 如何在 grpc-web 中使用 grpc 流式传输?
我想从 React 客户端向服务器发送文件。我知道为此我应该使用 grpc 流并将文件拆分成块。那么,问题是如何将这些块发送到服务器?
envoyproxy - 如何从 NodeJS 服务器调用 grpc-web 代理
我正在运行实现服务接口的 gRPC 服务器和允许客户端连接的 Envoy 代理,health.js
使用 webpack 构建并引用dist/main.js
到 HTML 文件中的以下 js 代码(文件)进行成功调用,它的工作
我想在NodeJS服务器而不是浏览器中执行此功能,实际上执行命令node health.js
时发生以下错误
typescript - 将 Jest 与 gRPC-Web 一起使用
我们在我们的项目中使用 gRPC-Web 客户端,但是当我们尝试对导入生成的 gRPC 类的代码运行单元测试时,我们得到一个错误
TypeError:无法读取未定义的属性“导航器”。
我猜这个问题在某种程度上与生成的模块的暴露方式有关,但是我不知道如何使它与 Jest 一起工作。
我尝试global.navigator
使用文件手动模拟对象setupTests.js
,但没有帮助。看起来 gRPC 代码在 Jest 之前执行。
我们的 Web 项目是使用带有 TypeScript 的Create React App库创建的,不会弹出,我们使用默认的 Jest 配置来运行单元测试。
请指教。
sh - Protobuf Build Protoc 选择目录中的所有 .proto 文件
我运行以下.sh
文件来构建我的原型。
它工作得很好,但是,我的团队可能会将其他目录添加到protos
该文件看不到的目录中。
有没有办法让我更新这个脚本来获取.proto
目录中的所有文件protos
?
我尝试了以下方法,但没有奏效:
我确定这只是一些语法问题,但我不知道该怎么做。
编辑:
我已经实现了一些东西来使我的生成器更加灵活,但它仍然很混乱:
c# - gRPC c# 文件下载/上传 + Web 客户端
主要问题:
我正在寻找一种解决方案来提高大文件的上传/下载速度。我听说过相对较新的技术 gRPC。我知道服务器到服务器的通信有好处,例如微服务架构。
客户
但是,我需要前端(浏览器)上的文件上传/下载组件(例如Fine 上传器、jQuery 文件上传插件、 Resumable.js 等)并支持 gRPC。我可以自己做支持。但我不知道如何以及什么以及是否有可能。所以我需要一个例子或一个建议或指向正确的方向。无论 JS 方面:vanilla、react、angular ...
服务器端
- c# 更可取
- node.js 可能
- java 可行的
对该主题进行的研究
- gRPC Java 文件下载示例- 此处给出了示例代码链接的答案。不幸的是链接坏了。
- 使用 GRPC 和 .NET CORE进行服务器流式传输 - 客户端是控制台。
- 更新 UploadFileClient.java - 如上
- .NET 示例的 gRPC - 我不需要示例
- 浏览器中 gRPC 的状态和他的 repo 使用 gRPC-Web 代理的各种实现测试 gRPC-Web 客户端的各种实现- 非常有趣(我认为有可能以某种方式在浏览器中实现客户端),但是因为我对 gRPC 的了解非常低完成任务对我来说太复杂了
请帮助或至少说这是不可能的
reactjs - 如何使用 grpc-web 构建 react-redux 应用程序?
我有一个react-redux
应用程序,我的团队使用grpc-web。我想知道 - 设计这种系统的最佳方法是什么?
目前计划是创建 3 个抽象级别:
API
grpc-web
模块 -客户周围的承诺包装器Redux thunks
level - 处理 API 的异步操作创建者React components props
- 将只询问组件需要什么
所以components
一无所知grpc
,他们与动作创建者混为一谈,动作创建者一无所知grpc
,他们处理一个api
模块,并且只有api
模块与grpc-web
存根一起使用。
我想走这条路的原因:
- 动作创建者和组件中没有特定于 grpc 的代码
- 我的基于 Promise 的 API 而不是 grpc-web 的基于回调的 API
我的问题是:
- 在 Redux 和 grpc-web 之间有一个抽象级别是个好主意吗?或者最好将这些东西保留在动作创建者的逻辑中?
- 我应该考虑一个通用的设计模式吗?(我在考虑“适配器”)
grpc-web
承诺API是个好主意吗?如果是的话,编写一个函数并即时执行是个好主意吗?- 我可以说我目前的计划是适配器模式吗?
- 如果我想使用适配器模式,我是否必须将数据收集的每个元素映射到我自己的接口?我知道我的组件(可能还有动作创建者)不应该依赖
grpc-web
API,因为这个 API 将来可能会改变