akka-http 发送连续的分块 http 响应(流)

2023-12-04

我有这个粗略的测试示例akka-http客户端和服务器。

服务器.scala:

import akka.actor.ActorSystem
import akka.stream.ActorMaterializer
import akka.stream.scaladsl.Sink
import akka.http.scaladsl.Http
import akka.http.scaladsl.model.HttpMethods._
import akka.http.scaladsl.model._
import scala.concurrent.Future

class Server extends Runnable {

    def run() = {

        implicit val system = ActorSystem("server")
        implicit val materializer = ActorMaterializer()

        val serverSource = Http().bind(interface = "localhost", port = 8200)

        val requestHandler: HttpRequest => HttpResponse = {
            case HttpRequest(GET, Uri.Path("/stream"), _, _, _) =>
                HttpResponse(entity = HttpEntity(MediaTypes.`text/plain`, "test"))
        }

        val bindingFuture: Future[Http.ServerBinding] = serverSource.to(Sink.foreach { connection =>
            connection handleWithSyncHandler requestHandler
        }).run()

    }

}

客户端.scala:

import akka.actor.ActorSystem
import akka.http.scaladsl.Http
import akka.http.scaladsl.model.{Uri, HttpRequest}
import akka.stream.ActorMaterializer

object Client extends App {

    implicit val system = ActorSystem("client")
    import system.dispatcher

    new Thread(new Server).start()

    implicit val materializer = ActorMaterializer()
    val source = Uri("http://localhost:8200/stream")
    val finished = Http().singleRequest(HttpRequest(uri = source)).flatMap { response =>
        response.entity.dataBytes.runForeach { chunk =>
            println(chunk.utf8String)
        }
    }

}

眼下Server只需回复一个“测试”。

我该如何更改HttpResponse in Server每 1 秒以无限循环的形式发送“测试”作为分块(流)?


找到了答案。

服务器.scala:

import akka.actor.ActorSystem
import akka.stream.ActorMaterializer
import akka.stream.scaladsl.{Source, Sink}
import akka.http.scaladsl.Http
import akka.http.scaladsl.model.HttpMethods._
import akka.http.scaladsl.model._
import scala.concurrent.Future
import scala.concurrent.duration._

class Server extends Runnable {

    def run() = {

        implicit val system = ActorSystem("server")
        implicit val materializer = ActorMaterializer()

        val serverSource = Http().bind(interface = "localhost", port = 8200)

        val requestHandler: HttpRequest => HttpResponse = {
            case HttpRequest(GET, Uri.Path("/stream"), _, _, _) =>
                HttpResponse(entity = HttpEntity.Chunked(ContentTypes.`text/plain`, Source(0 seconds, 1 seconds, "test")))
        }

        val bindingFuture: Future[Http.ServerBinding] = serverSource.to(Sink.foreach { connection =>
            connection handleWithSyncHandler requestHandler
        }).run()

    }

}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

akka-http 发送连续的分块 http 响应(流) 的相关文章

随机推荐

  • 如何像Xcode一样绘制带有蓝色色调的分段控件?

    我正在尝试重新创建 Xcode 中使用的分段控件 其中图像用蓝色绘制 例如在界面生成器中 到目前为止我有一个习惯NSSegmentedCell压倒性的 void drawSegment NSInteger segment inFrame N
  • 如何使用 Javascript 从 Google Api 检索服务帐户 OAuth2 令牌?

    我需要使用 google 项目服务帐户来使用 JavaScript 访问 google API 为了做到这一点 我需要 OAuth2 到 google API 服务器来获取身份验证令牌 据我所知 Google 提供了一个用于节点服务器的库
  • 检查字符串中是否有以字符 @ 开头的单词

    您好 感谢您花时间调查此问题 我正在开发一个评论系统 而不是使用嵌套评论 我只想添加 user 方法进行回复 举例来说 我输入了以下评论 moonwalker Thanks again for your reply 我正在寻找一个函数来检查
  • Git WebHook 不会拉取 (PHP)

    我有一个 PHP 文件 hook php 看起来像这样
  • 如何在Python中保存二维数组(列表)?

    我需要将表示游戏世界中的地图的二维数组保存到配置解析器中 数据如下 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 举个例子 我显然可以保存数据 但在读回数据后无法将其从字符串转换回列表 顺便说一句 我不介意是否必须使用 txt
  • 带有 templateUrl 和 ng-repeat 的自定义指令

    我已经研究这个问题几个小时了 终于我在 plunker 上复制了它 这是我的问题 当使用外部资源作为模板的自定义指令与 ng repeat 结合使用时 模型更改时视图无法正确渲染 在我的示例中 单击链接将替换模型 但旧数据尚未清除 如果我使
  • 将字符串列表与可用的字典/同义词库进行比较

    我有一个程序 C 它生成一个字符串列表 原始字符串的排列 大多数字符串是按预期随机分组的原始字母 即 etam aemt team 我想以编程方式找到列表中真正的英语单词的一个字符串 我需要一个同义词库 字典来查找和比较每个字符串 任何人都
  • 将 CSS/HTML 中的按钮与文本水平对齐一行?

    我想知道如何水平对齐按钮 最重要的是 我想向这些按钮添加文本 这就是我目前所拥有的 HTML 正文部分 div class tile div table class tile table tr td img class tile image
  • CSS 内部 id 选择器

    我在 CSS 文件中有以下 id 选择器 headerphoto 和 logo box 是 header id 的内部 id 选择器 我真的需要将这两个添加为内部 id 选择器吗 我可以将它们添加为普通的 id 选择器 这样做的最佳方法是什
  • 读取 Android 应用程序的 PKCS12/P12 客户端证书文件

    我正在尝试在我的 Android 应用程序中使用客户端证书 以便我可以确保仅与使用该应用程序或拥有该证书的人进行 HTTPS 通信 我的 res raw 文件夹中有证书 当我开始输入 R raw 时 Android Studio 就会看到它
  • 将缺失值替换为 n-1

    例如 我有 df pd DataFrame 0 420 np nan 455 np nan np nan np nan df 0 0 420 0 1 NaN 2 455 0 3 NaN 4 NaN 5 NaN 然后使用 df 0 isnul
  • 如何在多行中显示长文本的表视图节标题?

    我正在使用具有多个部分的表视图控制器 其中一些部分具有长文本 当我使用 titleForHeaderSection 时 如果文本长度超过表格视图框架 文本就会被截断 我想在下一行显示文本 而不是使用titleForHeaderInSecti
  • “星云”类不存在

    我在处理 3 3 时遇到问题 我刚刚开始开发一种星云模拟器 旨在模拟恒星从星云到红巨星的诞生和生命周期 到目前为止 我已经创建了两个类 Gas 针对每个单独的气体粒子 和 Nebula 指粒子的集合 我在编辑器中输入了以下代码 每次都得到相
  • 如何使用 Javascript 和 JQuery 操作 URL?

    我想制作一个包含大量 Javascript 交互的页面 但是 当用户浏览页面时 URL 也必须更改 因此 当用户共享 URL 或保存 URL 时 它可以引导他到达他的实际状态 我怎样才能做到这一点 例子 myapp com page1 my
  • 如何避免 DbgCommand 命令被写入日志文件

    我有一个恼人的问题Pykd pyd 我在脚本中使用它 启动了几个DbgCommand函数 例如 DbgCommand dt 0x000000eab8748430 CMap
  • C 语言中的正则表达式使用函数 regcomp 和 regexec 在第一个和第二个匹配之间切换

    我正在使用 Dev c IDE 编译我的 C WIN32 API 程序 我正在使用提供的正则表达式库http gnuwin32 sourceforge net packages regex htm 我正在使用此文档作为参考 上面的站点也提供
  • 我可以将表单设置为单例吗?

    我有一个 Visual C 2010 应用程序 它有一个名为MainWnd与其他工具窗口和对话框 我希望其他工具窗口能够与主窗体 对话 并调用其方法 但这需要一个实例MainWnd 并且由于在任何给定时间只会创建其中一种形式 因此没有理由我
  • 使用 matplotlib 计算 2 个椭圆的重叠区域

    有谁知道是否可以使用计算两个椭圆的重叠面积matplotlib patches Ellipse 我必须像这样省略 我想计算重叠面积与各个椭圆的面积之间的比率 仅使用这可能吗Ellipse from matplotlib patches 您无
  • 打开文件对话框在 Swift 中崩溃

    我想使用 NSFilemanager 中的打开文件对话框 但我的代码有时会崩溃 有时会工作 我不知道为什么 有时它可以 100 工作 有时窗口是空的 有时对话框后面的背景显示在窗口中 当发生崩溃时 Xcode 中会显示 signal SIG
  • akka-http 发送连续的分块 http 响应(流)

    我有这个粗略的测试示例akka http客户端和服务器 服务器 scala import akka actor ActorSystem import akka stream ActorMaterializer import akka str