问题标签 [spray-routing]

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

tomcat - Spray-Servlet 加载时出现死信

我正在使用spray-servlet(使用 Tomcat 8 作为 servlet 容器)和spray-routing.

每当我部署我的 WAR 时,我serviceActor都会收到一条消息。此消息会发送到特定路径,并且始终是相同的路径并且总是一次。sendersystem《死信》演员。

我不确定这条消息来自哪里。非常感谢调试此问题的任何帮助。

0 投票
1 回答
279 浏览

scala - 具有相同名称的多个标题

Spray 仅支持通过 headerValueByName 提取具有给定名称的 ONE 标头。我怎样才能在下面的 Spray 代码片段中获取名称为“whatever”的所有标题?必须有某种方法来提取标题!?

0 投票
2 回答
312 浏览

scala - 阅读并理解喷雾路由 DSL

我是新来喷涂的。我使用过几种奇怪的(对我而言)编程语言,如 python、JQuery 等……有了它们,我至少可以理解一些代码段的作用。不幸的是,使用 Spray,我什至无法阅读和理解一个简单的代码。

有人可以帮我阅读(用文字描述,代码做什么)以下简单的代码块。

注意:我知道非常高级,这将选择 url 参数并将它们添加在一起。但我想要的是,清楚地理解这个代码块水晶,因为我可以教给别人。HNil, Directive1, Directive1, ::对我来说有些奇怪。

0 投票
0 回答
70 浏览

scala - 喷涂路线 - 早期拒绝?

我的路由是这样的:

我的问题是错误代码已关闭。

在向 /api/persons/new 查询带有无效文档的 POST 时,我希望得到一个 InvalidEntity 响应代码,但我得到一个 405:不允许的方法,支持:GET。

与 /api/login 相同。

如果实体正确,则运行正确的路线。

如果我向 /api/persons/invalidnumber 发出 DELETE,我得到 405,而不是 404

如果我为这些路由运行 GET,我会得到 404。也许最后一条路由正在尝试运行——getFromResource?

有没有办法强制从路线“提前返回”?如entity(as[LoginRequest]) { ... } ~ failWithPreviousRejection

0 投票
1 回答
99 浏览

scala - 你如何将不同的喷雾指令嵌套到 1 个指令中

假设我有 1 个用于身份验证的指令。身份验证后,我想登录。这是我到目前为止所做的:

因此,我想将其转换为单个指令,而不是每次需要进行身份验证时都必须有 2 个。

我尝试使用平面地图,但这似乎不起作用,因为身份验证返回 Directive1 而 logRequestResponse 返回 Directive0。

所以我用地图尝试了它,但它似乎没有进入我的日志记录磁铁功能。

我也不能直接调用 logme 因为我也需要请求和响应对象。

有没有办法用 2 个返回不同指令类型的指令创建一个新指令?谢谢。

0 投票
1 回答
683 浏览

json - 无法找到延迟格式化的递归 JSON 类型作为隐式值

我正在使用 Spray 来构建 REST API。我的 JSON 数据类型之一是递归的:

在 HttpService 中完成路由时,出现以下错误:

HttpService 如下所示:

尽管该函数返回一个容器列表,但仍在工作中completeGET但是,注释掉的行get不起作用,并且无法将 Container 隐式转换为post,如错误消息中所示。我应该怎么做才能使容器隐式工作并仍然保持其递归结构?

0 投票
1 回答
219 浏览

scala - 运行 spray-can 时出现 NoClassDefFoundError

我有一个多模块 sbt 项目,它使用 spray-can 作为其依赖项之一。这是我的 sbt 中的内容:

我使用 scala 版本 2.11.6 和 Java 8。当我运行我的项目时,我收到以下错误:

0 投票
1 回答
219 浏览

scala - 如何在 spray.routing 中安全地同时处理路由请求?

看起来,Spray HTTP 服务器的示例使用使得让服务器按顺序而不是同时处理请求变得非常容易。这是正确的,因为示例显示路由对象实现为一次处理一个请求的参与者(facepalm?**)。这似乎一个普遍的问题

例如,在下面,访问 /work1 异步处理请求,但是对于 /work2 我们不幸地阻止了所有其他请求(假设 /work2 需要忙于从数据库中的 cookie 验证令牌)。

有没有办法使用 spray.routing 在到达路由之前执行分叉?

** 由于路由通常是无状态操作,因此制作路由器和 Actor 似乎没有什么好处,对吧?

对于我使用过的所有其他网络服务器,在接受 TCP 连接后几乎立即发生对处理程序进程或线程(IMO)的连接的控制。(我认为)这最大限度地提高了接收连接的速率,并将无意阻塞的风险降至最低——至少,完全避免了路由中的无意阻塞。


更新:

正如@rahilb 建议的那样

并调用:

... work1 或 work2 仍然需要大约 3 秒。

0 投票
1 回答
337 浏览

scala - 使用 Spray Route 流式传输动态内容

我正在开发一个 Web 服务,它提供一些相对较大的文件,每个文件都是在请求时动态创建的。就我而言,这是一个包含一堆文件的 ZIP 存档文件,但我认为其他类型的动态创建的文件也会出现同样的问题。

问题是我想避免在磁盘上创建 ZIP 文件,而只是将其直接流式传输到 HTTP 响应。我想到的一种方法是使用分块流式传输,这意味着流式传输参与者当时发送一个块,并在发送下一个块之前“等待”响应者的确认。(参见sendStreamingResponsehttps://github.com/spray/spray/blob/release/1.1/examples/spray-routing/on-spray-can/src/main/scala/spray/examples/DemoService.scala的示例)

不幸的是,我能找到的所有示例都显示了在您的流是预定义的情况下如何做到这一点,但我不太确定在其他未来准备数据流时,最好的方法是什么。

在我的例子中,有一个Future由 HTTP 请求启动的,它完成了所有繁重的获取文件的工作,并将它们写入java.util.zip.ZipOutputStream. 但在 Spray 中流式传输的工作方式恰恰相反,因为流式传输参与者需要在准备好数据时拉取数据——我不能只是将所有数据推送到流中。

这是一个熟悉的用例吗?解决它的最佳方法是什么?

0 投票
0 回答
324 浏览

scalacheck - Spray-testkit 未处理请求

我的服务路线:

我的规格:

如果在浏览器中测试,GET 和 POST 路由都可以正常工作。POST 也可以在测试中使用。我的 GET 路线有什么问题?为什么不能测试?是什么导致了这样的错误以及如何避免它?

更新: 这似乎与 scalacheck 有关,因为以下非基于属性的测试也是“绿色”的: