问题标签 [grpc-kotlin]

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

kotlin - 如何访问服务中的标头?

我正在尝试在我的后端处理 gRPC 中的 JWT 身份验证。我可以在拦截器中提取 JWT,但如何在我的服务中访问它?我认为应该使用 CoroutineContextServerInterceptor 来完成,但这不起作用:

输出:

0 投票
1 回答
82 浏览

kotlin - 如何在客户端 gRPC 中使用 Wire 和 Flow?

我需要带有 Wire 的服务 gRPC 流并且需要在客户端上使用 Flow,但executeBlocking()不提供通过 Flow 返回的方法,需要通过flow发射实现手册吗?

0 投票
1 回答
334 浏览

java - 当我使用 SimpleForwardingServerCallListener 时,gRPC 上下文返回 null

我想覆盖(with ) 中的sendMessage,sendHeaders​​ , onMessage,onHalfClose方法:ServerInterceptorContext

这是输出:

您可以看到它对( , )Context有效,但对( , ) 无效。delegatedCallsendMessagesendHeadersdelegatedListeneronMessageonHalfClose

为什么以及如何解决这个问题?

0 投票
1 回答
185 浏览

android - Android将授权标头添加到grpc Stub,错误:“onError:io.grpc.StatusRuntimeException:UNAVAILABLE”

我无法使用成功添加标题

正如Android建议的那样如何在grpc客户端中添加自定义标头?.

我得到: onError: io.grpc.StatusRuntimeException: UNAVAILABLE

在IOS中,我能够使用:

任何建议将被认真考虑

0 投票
1 回答
447 浏览

android - 如何使用 Kotlin 将 gRPC 添加到 Android Studio?

任务

我需要使用 gRPC 将 Android 客户端与 python 服务器连接起来。在 Python 中制作服务器和生成原型很容易,但是缺少教程和 Kt 客户端的混乱文档使得它看起来非常复杂。

背景

到目前为止,我已经使用 Kotlin 制作了一些简单的 Android 应用程序,我习惯于将依赖项添加到模块或应用程序级别的 build.gradle。

我尝试了什么?

我的第一个想法是像使用 Python 一样访问官方文档。我发现那里的指南非常混乱(我觉得那篇文章中缺少一些东西),所以我从他们的GitHub中查看了完整的示例。我还克隆了 repo 并使用gradlew installDist命令编译了原型。然后事情变得非常复杂:

  • 当你创建一个 Android Studio 项目时,你会得到一堆 gradle 东西(模块和应用程序级别的 build.gradle's、gradlew 和 gradlew.bat、设置等)
  • 克隆 repo 后,您会在 grpc-kotlin 文件夹中获得另一堆 gradle 东西。
  • 您还将获得 build.gradle.kts,它们似乎是相同的构建逻辑/包管理器帮助文件,但具有其他依赖项和 Kotlin 脚本语法。

这时候我去 YouTube 搜索一个简单的实现,发现只有少数关于gRPC 的 Kotlin主题视频,其中大部分是关于使用 Coroutines 时 Kotlin 中 gRPC 功能的演示视频.

到目前为止我所拥有的

我将所有 build.gradle 迁移到.kts。这就是我的模块级build.gradle.kts的样子:

这就是我的应用程序级别build.gradle.kts 的样子:

我可以生成原型,但它们有些不对劲。

问题

在实现请求函数时,分别是双向流,我发现我的所有 rpc 函数都需要一个额外的 StreamObserver 参数(我在互联网上找到的所有教程中都没有这个参数)。仔细一看,我发现所有生成的文件都在 java 和官方文档中,生成的文件都是 POJO 和 Kotlin。

这就是我生成的 Stub 类的样子:

我不知道如何为我的项目复制 gradle 脚本,我在互联网上找不到任何人解释所有这些 build.gradle 是如何链接在一起的(我发现模块级别 build.gradle 正在描述它们所在的模块应该构建和应用程序级别的 build.gradle 是同上的,但适用于整个应用程序)。我找到的大多数文章都与官方文档相同。

我想要的是

我只想要一个简单的项目或分步教程,而不需要“克隆它并在终端中运行命令,它就可以工作”。

我不责怪开发人员或编写官方文档的人,我敢打赌我在这里是愚蠢的,但我很难理解这些概念,如果有人能向我解释我做错了什么或在哪里学习,我将不胜感激.

另外,对于这个冗长的问题,我很抱歉,我尽量暴露我的 POV,这是我开始学习编程以来的第二个问题,如果问题和我的目标不够明确,我很抱歉,我会编辑如果需要的话。

0 投票
1 回答
46 浏览

gradle - 需要电线来为同一 gradle 项目中的客户端和服务器发出接口

我想在同一个 android 应用程序中为客户端和服务器使用接口。用例是在客户端运行的同一个应用程序中运行一个 okhttpmockwebserver 服务 gRPC 请求。为此,我创建了两个库项目,它们具有自己的客户端和服务器线配置,类似于那些

执行 wire-gradle-plugin 失败并出现以下异常:com.company.android.proto.HelloReply$Companion$ADAPTER$1 被定义了多次。引起:com.android.tools.r8.CompilationFailedException:编译失败,来源:.../com/company/android/proto/HelloReply$Companion$ADAPTER$1.dex

如果电线可以帮助我

  • 一次生成所有类和接口,包括服务器和客户端角色或
  • 排除类文件的生成,只为客户端或服务端生成服务接口

有没有解决方法我可以在没有 gradle 插件支持的情况下获得类似的结果?

0 投票
1 回答
250 浏览

java - RetryPolicy does not work with coroutines

I made a simple gRPC server in Kotlin with coroutines and a client with Java. In the cliente I enabled and configured a retry policy, but it does was not work. I speend a lot of time to find a solution, belivied that my client was broken, but the problem it was in the server. I will show you the code.

This is my proto file:

This is the client:

This is a part of my gRPC service, where i was testing the retry policy (the retry policy on client does not work with this implementation):

Another implementation, but now using StreamObserver (This implementation works fine):

The question is, whats is wrong? Can someone help me?

0 投票
0 回答
28 浏览

spring-boot - 将每个请求的 HTTP 标头转码为 Grpc 元数据

我正在构建一个将 HTTP 流量代理到 Grpc 服务的 API 网关。所有传入的 HTTP 请求都可以在 Authorization 标头中包含 JWT。我需要在每次请求时将此 JWT 转码为 Grpc 元数据,并与 Grpc 请求一起发送。我正在使用带有 grpc 代码生成器的 grpc-kotlin 库,用于客户端存根的 kotlin 挂起函数。我已经编写了这个 WebFilter 来将标头放入 ReactorContext:

它可以在控制器方法中使用,如下所示:

我想创建 Grpc 客户端拦截器或其他东西来从协程上下文中自动设置 Grpc 元数据。我有很多 Grpc 客户端调用,我认为为每个调用编写此代码并不是一个好习惯。我知道 envoy-proxy,但我需要对我的请求应用特定的逻辑,这就是为什么 envoy-proxy 不是我的选择。我应该如何将 Http 标头转码为 grpc 客户端调用元数据?谢谢。