问题标签 [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.
node.js - 在 NodeJS 中检测 GRPC 服务器故障
框架:经验丰富的工程师/开发人员第一次处理 GRPC 和 HTTP2,并且很长时间以来第一次处理流式编程。
@grpc/grpc-js
使用软件包时,为了成功检测 GRPC 服务器中的“故障”(服务器意外断开连接、服务器意外断开连接、服务器超时并消失等),我需要注意哪些事件?
也就是说——我们有一个使用 protobuffers 的 GRPC 服务,我们可以调用/设置一个类似这样的流
此时stream
是一个ClientDuplexStreamImpl
object,它以 Node 的 native Duplex
作为其父类/对象。
该Duplex
对象同时实现了writable
和readable
流接口,这意味着它可能会发出close
, drain
, error
, finish
, pipe
,unpipe
事件(可写),或close
, data
, end
, error
, pause
, readable
,resume
事件(可读)。该对象似乎也有一个metadata
和status
事件ClientDuplexStreamImpl
。
我想要做的是设置一个有弹性的流。在我的幼稚想法中,这就像“如果流因任何原因断开连接,我将销毁对象并尝试使用退避算法再次连接”一样简单。
我幼稚的头脑面临的挑战是不清楚close
和之间的区别end
是什么,或者error
频道是否只是让我知道发生了错误,或者是否发生了错误并且一切都消失了。
此外,因为这些是流事件,所以也不清楚是否每种服务器断开连接都会反映在流中,以及我是否需要查看不同的对象(这些对象是哪些对象?)来检测连接的实际状态到服务器。
还值得一提的是,这是针对我无法控制其实现的服务器。
所以——重申我的问题:作为 GRPC 服务的客户端/消费者,我需要做什么来确保我检测到服务器已经“消失”并且我应该尝试重新连接?
node.js - NodeJS:如何为 @grpc/grpc.js 包启用日志记录
在 NodeJS 中创建 GRPC 客户端时,如果我使用grpc
packageGRPC_VERBOSITY
,我可以使用设置为debug
环境变量来启动我的程序。
我会得到大量关于正在发生的网络通信的信息。
但是,如果我切换实现并使用@grpc/grpc-js
包,GRPC_VERBOSITY=debug
则没有效果。
我已经查看了实现的底层打字稿,我看到了日志调用@grpc/grpc-js
的样子。
所以我的问题是:如何在使用@grpc/grpc-js
带有 NodeJS 的 NPM 包时启用日志记录
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
node.js - 如何处理目标 firestore.googleapis.com:443 代码的名称解析失败:14
如何以及在哪里处理此错误并阻止我的应用程序崩溃?
ps:当我在没有互联网的情况下运行应用程序时应用程序崩溃。
grpc - 如何在不活动期间保持 grpc-js 客户端连接打开(活动)?
我有一个与客户端通信的 grpc 服务器流式 RPC。客户端在没有接收到来自服务器的通信时会引发错误。错误是:
我已经尝试搜索解决方案,唯一保持连接打开的“解决方案”是每 10 秒使用setInterval
. 我读到 grpc 应该为您保持连接打开,甚至在本文丢失时重新连接。
如上所述,KeepAlive 提供了一个有价值的好处:通过发送 HTTP/2 PING 定期检查连接的健康状况,以确定连接是否仍然存在。
我设置客户端的方式如下
我的理解"grpc.keepalive_time_ms"
是应该每次 ping 服务器x ms
我是否做错了什么、遗漏或误解了一些重要的事情?
protocol-buffers - NodeJS:protoc生成的文件不生成服务定义
在下面有一个相对简单的helloworld.proto
文件
当我运行protoc --js_out=import_style=commonjs,binary:. .\helloworld.proto
它时,它会生成一个helloworld_pb.js
文件,但它不包括我的Greeter
服务和我的SayHello
rpc 函数。查看其他一些帖子以及 Google 的参考资料(https://developers.google.com/protocol-buffers/docs/reference/overview),似乎我需要包含一个--plugin
选项,但我似乎找不到任何. 有人对此有解决方案吗?
grpc-web - gRPC-js + Angular ngx-grpc - Stream 在收到 4 条消息后停止接收消息
我有一个 grpc-js 服务器设置,带有一个名为 getUsers() 的 rpc 方法。从客户端拨打电话时,尽管发送了 6 条消息,但我只收到了 4 条回复。
这是客户端方法:
这是服务器方法:
服务器具有以下控制台输出:
然而客户端只有以下控制台输出:
有什么明显的事情会导致这种情况吗?某种超时?谁能给我一些关于我应该在哪里寻找的指示,因为我现在真的被困住了。
谢谢
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 标头。
typescript - 类型“GrpcObject”没有构造签名_typescript grpc
我是 ts 的新手。我正在与巢一起工作。我正在尝试使用我用 js 编写的 grpc-client 。但是当我尝试导出我的 grpc 服务对象时,我收到了这个错误:
错误 :
src/lib/grpc.client.ts:16:34 - 错误 TS2351:此表达式不可构造。并非所有类型为 'GrpcObject | 服务客户端构造器 | ProtobufTypeDefinition' 是可构造的。类型“GrpcObject”没有构造签名。
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。
我错过了什么 ?