问题标签 [grpc-go]

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 回答
1074 浏览

grpc - gRPC-Web 将 JSON 作为字符串发送

我需要将嵌套 JSON 对象的数据从 gRPC-web 发送到后端 Golang 服务器。我最终将 JSON 作为字符串转换并发送到后端服务器,并将字符串转换回后端服务器中的 JSON。这是一个好习惯还是有任何其他解决方案来传输 JSON。

0 投票
1 回答
1918 浏览

go - 使用protoc生成golang代码时导入和使用其他.proto文件出错

我一直在使用 protoc 毫无问题地生成 golang gRPC 客户端和服务器代码。由于我有多个使用相同数据类型的 gRPC 服务,我想为这些类型引用 base.proto 而不是复制和粘贴,这是额外的工作,可能会导致不同步问题。

下面是 base.proto 的示例:

这是一个特定的 .proto 示例:

而且,这是我的命令:

无论我尝试什么,它都会抛出这个:

2019/08/01 15:31:31 protoc-gen-go: error:bad Go source code was generated: 273:7: expected type, found '.' (以及另外 10 个错误)对应于以下行: rpc Publish(stream base.Label) returns (base.Empty) {}

有任何想法吗?

0 投票
1 回答
739 浏览

go - 从供应商目录使用 google.golang.org/grpc 时出错

我在使用供应商目录中的 google.golang.org/grpc 时遇到问题,我收到以下错误

尽管我使用的是从我的 gopath 复制的必要版本的软件包,但我得到了错误。但是,当我从供应商删除 golang.google.org/grpc 文件夹时,我的项目从 gopath 获取依赖项并且它工作正常,尽管一个 gopath 是我在供应商目录中的副本并且供应商目录中的所有其他库都工作正常除了grpc。

0 投票
1 回答
3218 浏览

go - 使用 google.protobuf.Timestamp 在 Go 中解析具有时区偏移的日期时间戳

我正在创建一个使用 GRPC 和 protobuf 的 Go 应用程序。我的 RPC 服务将获取包含 type 的消息google.protobuf.Timestamp,对其进行解析并最终将其保存在数据库中或对其执行更多操作。

我对什么被认为是 type 的有效输入感到困惑google.protobuf.Timestamp。我希望对带有时区偏移的日期时间戳使用以下格式。

2019-02-15T13:00:00+01:00

这是我正在使用的原始文件。

问题是当我向 GRPC 服务器发送包含日期时间戳的消息时。我希望给定*tsbp.Timestamp2019-02-15T13:00:00+01:00日期时间戳的类型是有效的,并给我从纪元开始的适当秒数。GetSeconds()(从 timestamp.go调用之后)

为上面的示例输入调用ptypes.TimestampString(ts *tspb.Timestamp)返回1970-01-01T00:00:00Z

是否google.protobuf.Timestamp接受带有 +- 偏移量的日期时间戳?

或者我是否必须将输入输入为 String 类型,然后解析为time.Timewithtime.Format而不是在 protobuf 中使用时间戳变量类型?如果是这样,你能提供一个例子吗?

0 投票
1 回答
1786 浏览

go - grpc:使用 oneof 导致无效的内存地址或 nil 指针取消引用

我正在尝试使用 Go 将 proto3 结构发送到 gRPC 服务器。该结构有一个oneof类型,我似乎可以很好地填充它。将消息发送到我的 gRPC 客户端时,我对invalid memory address or nil pointer reference.

我有原型定义(完整文件位于https://github.com/MovingGauteng/geofancy-rs/blob/master/proto/geofancy.proto

围棋代码是:

堆栈跟踪如下所示:

0 投票
1 回答
3133 浏览

go - 如何在 monorepo 中设置 protobuf、grpc 和 Go 模块?

我正在尝试在 Go 中创建一个基于微服务的 API,非常基础,只是为了学习一些东西。我必须实现三个主要目标。

  1. 单回购。
  2. 能够根据需要使用不同的后端语言(即,Go 中的一种微服务,Node.js 中的两种,Python 中的一种)。
  3. 使用 gRPC。

目前我的结构看起来像这样(并且存储在~/Projects/tkgGOPATH 之外)。

项目结构

每个“服务”都应该是一个独立的应用程序,用“whatever”编写。如您所见,我有一个 Go 服务和一个 React 前端应用程序。此外,还有一个我想用来构建东西的 Makefile,但我可能会转向 shell 脚本、Docker 等等。没关系。

所以现在的问题。如何使生成的 proto 文件在此设置中正常运行?我想我对 Go 模块和包不太了解,因为我无法设置它以便articles.go(从cmd)可以访问生成的api/article.pb.go. 怎么做?

我在 go.mod 中尝试了各种不同的包名称,在 proto 文件中尝试了不同的 go_packages,我尝试了不同的 protoc 命令和路径。我敢打赌这是愚蠢的,这对于精通 Go 的人来说是非常明显的,但对于像我这样来自 Node.js 背景的人来说,无能为力import "../api/article.pb.go"是令人愤怒的。:(

我得到的错误是:could not import tkg/services/articles/api/article (no parsed files for package tkg/services/articles/api/article)。当然,包名称的值不同。我已经尝试解决它两天了。

你会如何处理这个问题?

0 投票
1 回答
3459 浏览

go - gRPC 客户端流式流控在 Go 中是如何工作的?

我想知道,流控制在 Go 中的客户端流式 gRPC 服务中是如何工作的。

具体来说,我有兴趣知道何时调用stream.SendMsg()客户端块中的函数?根据文档

SendMsg() 阻塞直到:

  • 有足够的流量控制来调度 m 与传输,或者......

那么流的流控机制的规范是什么?例如,如果负责从流中读取消息的服务器端代码读取消息的速度不够快,那么在什么时候调用 SendMsg() 会阻塞?

服务器是否实现了某种背压机制来告诉客户端它还没有准备好接收更多数据?同时,所有在背压信号之前成功发送的消息,在哪里排队?

0 投票
0 回答
236 浏览

grpc-go - http2Server HandleStreams 失败

我有一个双向流 RPC,在服务器端我看到以下失败消息

http2Server.HandleStreams 无法读取帧:读取 tcp4 192.168.122.155:57400->192.168.122.1:16150:读取:对等方重置连接

Client 和 Server 都是用 golang 编写的。

我正在尝试通过调用 stream.CloseSend() API 从客户端优雅地关闭流。

0 投票
2 回答
1884 浏览

go - gRPC 实现性能 - java v/s goLang

gRPC 支持多种语言的 rpc 服务器和客户端实现。我需要知道在 goLang v/s Java 中实现 gRPC 服务器和客户端是否存在显着的性能差异。如果我们正在寻找高性能和可扩展性,那么 go 或 java 哪个实现会更好

谢谢 Girish TS

0 投票
2 回答
4720 浏览

go - 如何响应多个 gRPC 客户端?

我正在构建一个可以有多个 gRPC 服务器并且肯定会有多个 gRPC 客户端的应用程序,我想知道,如何在服务器端识别这是我正在与之交谈的客户端,并且只向该客户端发送数据。我正在使用双向流 RPC,现在数据被广播到每个客户端,我不希望这样。go gRPC 中的哪些功能使其成为可能,或者我如何实现它?