2016-07-05 75 views
8

我想找出使用​​akka-http和akka-streams实现真正的websocket应用程序的最佳方法。我最想找的就是简单,我现在还没有得到。Akka Streams Websocket配线

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

不同于简单的聊天应用实例在那里,有出现至少3个问题,这似乎没有一个标准溶液:

  • 有条件跳过响应,例如,因为它不被预期该请求的客户端将收到响应。如果我使用从消息到消息的典型流程,一旦请求达到目标,我需要阻止它进一步传播回webSocket。它可以用特殊的过滤器(包括一些痛苦)或使用各种其他方式(例如,Conditionally skip flow using akka streams)来完成,但是这增加了许多样板和复杂性。理想情况下,我希望能够插入“跳过”消息,只是略过其他所有内容。

  • 将传入消息路由到适当的地方(例如,演员,mongo)。再次,我可以找到涉及大量样板的解决方案(例如,在不处理这种请求的分支机构进行广播和过滤)。理想情况下,我应该能够定义如下内容:如果消息是X,则发送消息,如果消息为Y,则发送消息等。

  • 将错误传播回客户端。非常类似于上述路由问题。例如,如果JSON解析失败,我需要添加一个单独的路径(广播+合并),我发送一条错误消息,但如果在下一阶段发生错误,我甚至不能轻松地重复使用相同的路径,而且我想将该错误传播给用户。理想情况下,我应该有一条单独的错误处理路径,可以在流中的任意点使用,完全绕过流的其余部分并返回给客户端。

目前,我有这个跨越15线与路径通过> 20个不同的阶段会出奇复杂的图形,我真的很担心保持这种解决方案的复杂性检查。在这个尺寸下DSL几乎是不可读的。我当然可以更好地进行模块化,但是对于那些应该简单得多的东西来说,这感觉像是一个疯狂的麻烦。

我错过了什么吗?我疯狂考虑阿卡流这样的任务?任何想法或代码示例都可以让我控制所有这些复杂性?

在此先感谢!

回答

2

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

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