问题标签 [grpc-js]

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 投票
1 回答
1478 浏览

node.js - 在 NodeJS 中检测 GRPC 服务器故障

框架:经验丰富的工程师/开发人员第一次处理 GRPC 和 HTTP2,并且很长时间以来第一次处理流式编程。

@grpc/grpc-js使用软件包时,为了成功检测 GRPC 服务器中的“故障”(服务器意外断开连接、服务器意外断开连接、服务器超时并消失等),我需要注意哪些事件?

也就是说——我们有一个使用 protobuffers 的 GRPC 服务,我们可以调用/设置一个类似这样的流

此时stream是一个ClientDuplexStreamImplobject,它以 Node 的 native Duplex作为其父类/对象。

Duplex对象同时实现了writablereadable流接口,这意味着它可能会发出close, drain, error, finish, pipe,unpipe事件(可写),或close, data, end, error, pause, readable,resume事件(可读)。该对象似乎也有一个metadatastatus事件ClientDuplexStreamImpl

我想要做的是设置一个有弹性的流。在我的幼稚想法中,这就像“如果流因任何原因断开连接,我将销毁对象并尝试使用退避算法再次连接”一样简单。

我幼稚的头脑面临的挑战是不清楚close和之间的区别end是什么,或者error频道是否只是让我知道发生错误,或者是否发生了错误并且一切都消失了。

此外,因为这些是流事件,所以也不清楚是否每种服务器断开连接都会反映在流中,以及我是否需要查看不同的对象(这些对象是哪些对象?)来检测连接的实际状态到服务器。

还值得一提的是,这是针对我无法控制其实现的服务器。

所以——重申我的问题:作为 GRPC 服务的客户端/消费者,我需要做什么来确保我检测到服务器已经“消失”并且我应该尝试重新连接?

0 投票
1 回答
1931 浏览

node.js - NodeJS:如何为 @grpc/grpc.js 包启用日志记录

在 NodeJS 中创建 GRPC 客户端时,如果我使用grpcpackageGRPC_VERBOSITY ,我可以使用设置为debug环境变量来启动我的程序。

我会得到大量关于正在发生的网络通信的信息。

但是,如果我切换实现并使用@grpc/grpc-js包,GRPC_VERBOSITY=debug则没有效果。

我已经查看了实现的底层打字稿,我看到了日志调用@grpc/grpc-js的样子。

所以我的问题是:如何在使用@grpc/grpc-js带有 NodeJS 的 NPM 包时启用日志记录

0 投票
0 回答
747 浏览

node.js - 在 Node.js gRPC 客户端中使用来自双向流回调的响应

我有一个用 Go 编写并在 unix 域套接字上运行的 grpc 服务器。我正在为此编写一个 nodeJS 客户端。由于 grpc-node 不支持 unix 套接字,我不得不使用@grpc/grpc-js.

现在我面临的问题是我需要对从服务器返回的响应执行一些操作。我目前有这个并且它有效。但是有没有一种更清洁/更好的方法来实现这一点?

有没有更好的方法来做到这一点?我看过grpc-caller图书馆,但使用它@grpc/grpc-js会给我一个Channel's second argument must be a ChannelCredentials 错误。

这是我到目前为止写的客户端:https ://github.com/godaddy/asherah/blob/servicelayer_node/server/samples/clients/node/appencryption_client.js

0 投票
2 回答
2679 浏览

node.js - 如何处理目标 firestore.googleapis.com:443 代码的名称解析失败:14

如何以及在哪里处理此错误并阻止我的应用程序崩溃?

ps:当我在没有互联网的情况下运行应用程序时应用程序崩溃。

0 投票
0 回答
1067 浏览

grpc - 如何在不活动期间保持 grpc-js 客户端连接打开(活动)?

我有一个与客户端通信的 grpc 服务器流式 RPC。客户端在没有接收到来自服务器的通信时会引发错误。错误是:

我已经尝试搜索解决方案,唯一保持连接打开的“解决方案”是每 10 秒使用setInterval. 我读到 grpc 应该为您保持连接打开,甚至在本文丢失时重新连接。

如上所述,KeepAlive 提供了一个有价值的好处:通过发送 HTTP/2 PING 定期检查连接的健康状况,以确定连接是否仍然存在。

我设置客户端的方式如下

我的理解"grpc.keepalive_time_ms"是应该每次 ping 服务器x ms

我是否做错了什么、遗漏或误解了一些重要的事情?

0 投票
2 回答
889 浏览

protocol-buffers - NodeJS:protoc生成的文件不生成服务定义

在下面有一个相对简单的helloworld.proto文件

当我运行protoc --js_out=import_style=commonjs,binary:. .\helloworld.proto它时,它会生成一个helloworld_pb.js文件,但它不包括我的Greeter服务和我的SayHellorpc 函数。查看其他一些帖子以及 Google 的参考资料(https://developers.google.com/protocol-buffers/docs/reference/overview),似乎我需要包含一个--plugin选项,但我似乎找不到任何. 有人对此有解决方案吗?

0 投票
0 回答
329 浏览

grpc-web - gRPC-js + Angular ngx-grpc - Stream 在收到 4 条消息后停止接收消息

我有一个 grpc-js 服务器设置,带有一个名为 getUsers() 的 rpc 方法。从客户端拨打电话时,尽管发送了 6 条消息,但我只收到了 4 条回复。

这是客户端方法:

这是服务器方法:

服务器具有以下控制台输出:

然而客户端只有以下控制台输出:

有什么明显的事情会导致这种情况吗?某种超时?谁能给我一些关于我应该在哪里寻找的指示,因为我现在真的被困住了。

谢谢

0 投票
1 回答
1152 浏览

c++ - 您如何读取/记录 gRPC HTTP 标头(不是自定义元数据)?

我正在使用 gRPC 和 Protobuf,使用 C++ 服务器和 C++ 客户端,以及 grpc-js 客户端。有没有办法从 gRPC 的传输层读取所有 HTTP 请求/响应标头?我正在寻找那种典型的客户端/服务器 HTTP 标头 - 特别是,我想看看正在使用什么版本的协议(是否是 HTTP1.1/2)。我知道 gRPC 应该使用 HTTP2,但我试图在低级别确认它。

在一个典型的 gRPC 客户端实现中,你有这样的东西:

在服务器端,类似:

我认为 ServerContext 或请求对象可能有权访问此信息,但上下文似乎只提供了一个自定义元数据的接口。

没有任何gRPC C++ 示例表明存在这样的 API,gRPC 源代码中也没有任何相关的源/头文件。在教程、博客文章、视频和文档方面,我已经用尽了我的选择——我在 grpc-io 论坛上问了一个类似的问题,但没有得到任何人。希望SO工作人员在这里有一些见解!

我还应该注意,我尝试将各种环境变量作为标志传递给正在运行的进程,以查看是否可以获得有关 HTTP 标头的详细信息,但即使启用了这些标志(与 HTTP 相关的标志),我也看不到基本的HTTP 标头。

0 投票
1 回答
231 浏览

typescript - 类型“GrpcObject”没有构造签名_typescript grpc

我是 ts 的新手。我正在与巢一起工作。我正在尝试使用我用 js 编写的 grpc-client 。但是当我尝试导出我的 grpc 服务对象时,我收到了这个错误:

错误 :

src/lib/grpc.client.ts:16:34 - 错误 TS2351:此表达式不可构造。并非所有类型为 'GrpcObject | 服务客户端构造器 | ProtobufTypeDefinition' 是可构造的。类型“GrpcObject”没有构造签名。

0 投票
0 回答
198 浏览

microservices - grpc-js 和 grpc-web 的返回数据响应不同

我正在从两个不同的 gRPC 客户端 grpc js 和 grpc web 向同一个 gRPC 服务器发出请求,但我对 grpc-web 中的返回响应格式感到困惑。

下面是我写的 protobuf 消息类型;

使用 grpc-js,返回响应是如下对象;

但是使用 grpc-web 它会返回带有这么多嵌套对象和数组的原始响应数据。

如果我像这样修改代码;

然后它返回 verResult 和错误字段,但 verResult 的值是一个空数组。

我正在使用 protobuf-js-3.17.0 和 protoc-gen-grpc-web-1.2.1-windows-x86_64。

我错过了什么 ?