在演员内部或外部的Akka.NET中将代理的websocket客户端放在哪里?

在演员内部或外部的Akka.NET中将代理的websocket客户端放在哪里?

问题描述:

我是Akka.NET的新手。我正在构建某种websockets代理,我想使用Akka.NET通过使用其actor系统处理(转换和转发)传入流量。但我想知道做这件事的最好方法是什么。在演员内部或外部的Akka.NET中将代理的websocket客户端放在哪里?

问题我有是:

  • 我应该创建主监听的演员之外,实例化一个演员的每一个进入“听”客户端?或者我应该把我的主要听众也放在演员中?
  • 我是否应该在一个Actor(也许是我之前提到的问题的一个小孩演员)中与“发送”websocket客户端一起创建转发和转换逻辑?或者我应该让我的客户在演员之外,并将其放入Akka.NET消息中?

@frankhommers所以我一直在研究一个应用程序,该应用程序使用WebSocket消耗实时馈送并将解析的消息传递到Akka.NET集群。

我已经采取了这种情况的方法可以概括为:

  1. 实现WebSocket的消费者为Akka.Streams Source。 Akka.Streams提供了一个高度可组合和高性能的API,用于执行反序列化,过滤和转换来自WebSocket的消息,并能够通过缓冲处理下游反压。你可以找到一些Akka.Streams的第三方实现的例子,例如Azure Service Bus等人在这里:https://github.com/AkkaNetContrib/Alpakka - 这应该有助于给你一个想法如何实现自己。
  2. 我启动我的Source<string>作为ClusterSingleton,它保证在任何给定的时间在集群中只有一个WebSocket消费者副本。这个数据源最终会将其结果广播给集群中其他位置的几个演员,他们将处理反序列化的消息并执行其他操作。

如果您还没有进入Akka.NET集群,请不要为此付出 - 您可以在熟悉Akka.NET后再引入该功能。但是设计的目标是通过让Feed的单个消费者获得相当高的一致性,并通过Akka.NET自己的消息传递功能在其他地方广播结果。

+0

你的应用程序是开源的,所以我可以偷看一下吗?或者你知道另一个明确使用WebSocket的例子吗? – frankhommers

+0

不幸的是:( – Aaronontheweb

+0

我明白Akka.Streams Source是要走的路,但我不知道如何开始这个项目。也许Akka.NET不适合我这样做。Thx。 – frankhommers