当前位置: 首页 > 知识库问答 >
问题:

将响应从gRPC服务流式传输到REST客户端

敖硕
2023-03-14

我正在尝试编写同时使用gRPC和REST的服务。实现技术有Java、Spring-Boot和gRPC。使用场景示例如下:

目的是有外部客户端可以通过RESTendpoint和/或通过进行gRPC调用与应用程序交互。在内部,有“网关”服务提供外部接口,并负责在外部客户端和执行实际工作的“域”服务之间传输/路由请求和响应。内部服务将通过gRPC进行通信。

外部客户端不知道如何在内部处理事情,域服务没有外部接口。

我已经能够让一个基本的请求/响应模式从端到端工作,但不确定如何实现涉及流的模式(在任何方向)。事实上,这并不完全正确——我已经能够让gRPC站点(https://grpc.io/)上提供的基本示例工作。

这是我正在努力做的一个例子,我似乎不知道如何工作:

“域”服务能够将对象集合(即流源)返回给请求者。域使用gRPC逻辑将这些对象提供给调用客户端(本例中为“网关”)。外部客户端对网关服务进行REST调用,以请求域服务提供的对象集合。

据我所知,域和网关之间的通信很好,但在尝试将信息发送回外部客户端时出现了问题。有关代码和我遇到的错误的具体详细信息,请参阅将gRPC服务的响应流返回到RESTful客户端的相关问题。

想到的一个问题是:REST可以用来处理信息流(双向)吗?如果不能,我有什么选择,如果有的话?如果可以,我该怎么做?

更新:

我已经对上面提到的同伴进行了更新。

共有1个答案

劳和雅
2023-03-14

你可以试试StreamingResponseBody(https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/servlet/mvc/method/annotation/StreamingResponseBody.html),它允许在不阻塞主线程的情况下写入输出流。

 类似资料:
  • 问题内容: 我设法将文件从客户端大块上传到服务器,但是现在我想实现相反的方式。不幸的是,此部分缺少官方模块页面上的文档。 我要执行以下操作: 向服务器发出流和带有文件名的“下载”事件 服务器应创建一个readstream并将其通过管道传输到客户端发出的流 当客户端到达流时,将出现一个下载弹出窗口,并询问将文件保存在何处 我不想使用简单的文件超链接的原因令人困惑:服务器上的文件已加密并重命名,因此我

  • 问题内容: 我产生了以下孩子:我希望在客户端( 浏览器 )上 一个接一个地 而不是整体接收ping结果。 到目前为止,我已经尝试过了: 然后: 在这两种情况下,浏览器都将等待10次ping操作,然后将结果整体打印出来。我想让他们一个接一个,如何实现呢? (客户只是在拨打电话并用console.log记录结果) 编辑: 尽管我确实相信websockets是实现这一点所必需的,但我只是想知道是否还有其

  • 问题内容: 问题很简单:假设我有一个完全可响应的后端,如何将其流式传输到浏览器(例如大文本),并在每个块来自服务器时立即将它们打印给用户? 可能我缺少一些重要的概念性要点,但是我所需要知道的是:是否可以通过一个HTTP GET(或否)请求发送少量数据(从服务器到浏览器)?关键是:在发送全部数据之前,我可以写那些小的部分吗? 谢谢你的帮助。我以前确实尝试过google,但是我总是会得到其他概念(例如

  • 有可能从客户端向服务器抛出异常吗?我们有一个从服务器到客户端的开放流: 当我尝试这样的事情时: 我在客户端的StreamObserver.on错误中获得了异常,但在服务器端没有异常。

  • 我有一个在远程服务器(debian linux)上运行的Java应用程序。该应用程序将运行时信息记录到文件中。 偶尔,支持人员需要使用客户端工具(不是在服务器上运行,而是在支持人员的桌面上运行)分析日志。然后,该工具需要远程访问 < li >服务器上的旧日志文件 < li >当前日志文件(实时增长) 我正在搜索一种良好的(=标准,灵活,安全,调试良好等)方式将这些过去和现在的日志消息流式传输到我的

  • 问题内容: 我一直在使用Node.js中的二进制流进行实验,但令我惊讶的是,确实有一个工作演示,它使用节点无线电流获取Shoutcast流,并使用分块编码将其推入HTML5元素。但这仅适用于Safari! 这是我的服务器代码: 我的客户代码很简单: 这在Mac上的Safari 5中可以正常运行,但在Chrome或Firefox中似乎无法执行任何操作。有任何想法吗? 可能的候选对象包括编码问题,或者