0

我有一个场景,我有一堆 Akka Actor 运行,每个 Actor 代表一个 IoT 设备。我有一个基于 Play 的 Web 应用程序,这些 Actor 在其中运行并连接到这些 IoT 设备。

现在我想通过 WebSocket 端点将来自 Actor 的信号暴露给外界。每个 Actor 都有某种机制,我可以使用它来询问最新的信号状态。

我的想法是执行以下操作:

  1. 在我的控制器中添加一个 WebSocket 端点,该端点需要它需要信号的 IoT 设备的 ID。在这个控制器中,我将执行一个actor选择来获取与传入的 IoT 设备的 id 对应的 Actor 实例。

  2. 使用步骤 1 中获取的 ActorRef 并实例化 WebSocketActor

  3. 在这个 WebSocketActor 中,我将实例化一个 Monix Observable,它将定期使用 actorRef 并要求它提供信号。

  4. 收到这些信号后,我会将其传递给 WebSocket 端点

现在我的问题是:

  1. 如果客户端打开了 WebSocket 流并且在一段时间后代表物联网设备的 Actor 死了,会发生什么。我可能应该在我的 WebSocketActor 中处理这种情况。但是这会是什么样子呢?

  2. 如果代表物联网设备的 Actor 重新活跃起来(假设我设置了一些监督),我可以继续处理在 Actor 死亡之前打开套接字连接的客户端吗?我的意思是客户端是否需要以某种方式关闭并再次打开连接?

请建议?

4

1 回答 1

1

如果您想查看 Akka actor + Monix 集成示例,通过 WebSocket 进行通信,请查看monix-sample项目。

该代码处理网络故障。如果您将在浏览器中加载该示例,请断开网络连接,一旦连接恢复,您将看到它恢复。

于 2018-02-25T07:36:08.033 回答