c# - 在 Akka.NET 的 Actor 内部或外部放置代理的 websocket 客户端在哪里?

标签 c# akka.net

我是 Akka.NET 的新手。我正在构建某种 websockets 代理,我想使用 Akka.NET 通过其 actor 系统来处理(转换和转发)传入流量。但我想知道最好的方法是什么。

我的问题是:

  • 我是否应该在 Actor 外部创建主要监听器,并为每个传入的“监听”客户端实例化一个 Actor?或者我应该把我的主要听众也放在一个 Actor 里面?
  • 我是否应该在 Actor 内部(也许是我上一个问题的子 Actor ;-) )中创建转发和转换逻辑以及“发送”Websocket 客户端?或者我应该将我的客户端放在 actor 之外并将其放入 Akka.NET 消息中?

最佳答案

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

我为此采取的方法可以总结为:

  1. 将 WebSocket 使用者实现为 Akka.Streams Source 。 Akka.Streams 提供了一个高度可组合且高性能的 API,用于执行反序列化、过滤和转换来自 Websocket 的消息等操作,并且它也能够通过缓冲处理下游背压。您可以在此处找到 Akka.Streams Sources 等第三方实现的一些示例,例如 Azure Service Bus 等: https://github.com/AkkaNetContrib/Alpakka - 这应该有助于您了解如何自己实现。
  2. 我启动了我的 Source<string>作为 ClusterSingleton ,这保证了在任何给定时间集群中都只有一份我的 WebSocket 使用者的副本。该源最终将其结果广播给集群中其他地方的几个参与者,他们将处理反序列化的消息并用它做其他事情。

如果您还没有开始使用 Akka.NET 集群,请不要担心 - 您可以在更熟悉 Akka.NET 之后再介绍该功能。但设计的目标是通过只有一个 feed 消费者并通过 Akka.NET 自己的消息传递功能将其结果广播到其他地方来提供相当高的一致性。

关于c# - 在 Akka.NET 的 Actor 内部或外部放置代理的 websocket 客户端在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46676892/

相关文章:

c# - C# 是否需要 private 关键字?

c# - MVcHtmlString 中的堆栈溢出异常

c# - 与声明实例变量的方式不同

akka.net - Akka.Remote - 解除关联后无法向远程参与者发送消息

azure - Akka.NET 记录器不将日志发送到 Application Insights

F# - 类型参数不能用作类型构造函数

c# - 如何使用直线 API 将机器人集成到网站

c# - 如何使用 Entity Framework 6.1.1 中的 [Index] 属性和 Code First

c# - Akka.net - 尝试测试重复的预定消息

c# - 如何处理 Actor 内部的异常?