实时webapp/Akka actor通知websocket连接向客户端发送信息



我在Scala中使用Play Framework 2.2.1。

我想要实现的场景是:

新注册用户第一次登录后,必须对数据库进行一些有趣的更新
这将是一个相当长时间运行的过程(大约几秒钟)
我想要的是在所有更新完成后通知用户(前端),他现在可以从这些新创建的链接中受益(无论更新会给他带来什么细节)。

我曾想过在我的控制器中分离一个Akka actor,以便处理不同更新所需的逻辑,并将它们执行到数据库中
事实上,在我的情况下,数据库访问是一个阻塞IO。

我的主要问题是如何利用websocket只在这个长时间运行的任务完成时通知用户。

是否存在一种机制来通知我已经建立的websocket连接,一个参与者刚刚完成了它的工作?

也许是这样的?:

在您的控制器中,当用户第一次发出请求时,调用将执行不同操作的方法,因为这些操作是阻塞的,将DB调用封装在给定的actor中,然后您应该能够要求actor执行操作,而不是调用一个简单的方法,此ask方法(cf Akka-doc)将返回future。

然后,这个future将被发送给一个给定的参与者,该参与者持有对不同连接的引用(同时控制器返回一个Result,Ok…),然后这个参与者应该监听future的状态,如果它成功(onSuccess),则使用适当的连接向适当的用户推送消息。out枚举器可以在第一次创建WS连接时检索和保存,想到的一种基本方法是,您可以将它们保存在以用户id为键的映射中。然后,您可以使用这些枚举器将消息推送到客户端。

最新更新