gpt4 book ai didi

scala - Akka Streams Websocket 接线

转载 作者:行者123 更新时间:2023-12-04 08:47:57 25 4
gpt4 key购买 nike

我试图找出使用 akka-http 和 akka-streams 实现真正的 websocket 应用程序的最佳方法。我主要寻找的是简单性,而我现在还没有得到。

假设您有一个相当复杂的管道,它需要区分多个请求,有时将请求发送给参与者进行处理,有时发出 mongo 查询并返回响应,有时在 REST API 上执行 PUT,等等。

与现有的简单聊天应用程序示例不同,至少出现了 3 个似乎没有标准解决方案的问题:

  • 有条件地跳过响应,例如,因为客户端不希望此请求会收到响应。如果我使用从消息到消息的典型流,一旦请求达到其目标,我需要阻止它进一步传播回 websocket。它可以使用特殊的过滤器(涉及一些痛苦)或使用各种其他方式(例如,Conditionally skip flow using akka streams)来完成,但这会增加很多样板文件和复杂性。理想情况下,我希望能够插入跳过其他所有内容的“跳过”消息。
  • 将传入消息路由到适当的位置(例如,actor、mongo)。再一次,我可以找到涉及大量样板的解决方案(例如,在不处理此类请求的分支处广播和过滤)。理想情况下,我应该能够定义如下内容:如果消息是 X,则将其发送到那里,如果消息是 Y,则将其发送到那里等等。
  • 将错误传播回客户端。非常类似于上面描述的路由问题。例如,如果 JSON 解析失败,我需要添加一个单独的路径(广播 + 合并),沿该路径发送错误消息,但如果在下一阶段发生错误,我什至无法轻松重用相同的路径并且我想将该错误传播给用户。理想情况下,我应该有一个单独的错误处理路径,可以在流程中的任意点使用,完全绕过流程的其余部分并返回到客户端。

  • 目前,我有这个非常复杂的图表,跨越 15 行,路径经过超过 20 个不同的阶段,我真的很担心要控制这个解决方案的复杂性。在这种大小下,DSL 几乎是不可读的。我当然可以更好地模块化一点,但是对于应该更简单的东西来说,这感觉就像是一个疯狂的麻烦。

    我错过了什么吗?我为这样的任务考虑 akka-streams 是不是疯了?有什么想法或代码示例可以让我控制所有这些复杂性吗?

    提前致谢!

    最佳答案

    这是一个非常广泛的问题,可能无法以目前的形式回答。

    Akka HTTP 在其 HTTP 处理层中解决了许多这些问题(例如空响应、路由、返回错误)。你能利用那里学到的一些经验教训并将它们应用到你的系统中吗?或者,也许更好,您能否将您的系统从使用 websocket 通信转换为使用 HTTP 通信并直接使用该代码?

    关于scala - Akka Streams Websocket 接线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38206578/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com