我正在使用Play框架与Scala,Akka和websockets for frontend。 我想为用户构建一个通知套接字。如何将actorRef与用户ID连接并检查用户是否在线?
答案 0 :(得分:1)
不考虑“用户是否在线”,而只考虑websockets如何工作。它是需要启动连接的前端,因此您自动获得用户在线的信息(更准确地说,是具有已登录用户的Web浏览器)。
我创建了一个actor,它是所有其他websocket actor(直接处理websocket的actor)的协调者。该协调器将具有userId到Seq [ActorRef]的映射。这是一个值为Seq [_]的映射,因为用户可以同时打开多个浏览器选项卡(许多actorRef对应一个userId),您应该正确处理它。每当客户端启动连接时,都会创建一个新的websocket actor。在这个actor的开头你可以将它注册到协调器actor(覆盖preStart)。当websocket actor被销毁(websocket连接已经关闭)时,取消注册它。在协调器中注册/取消注册会导致将此websocket的actorRef添加/删除到地图中。
要向用户(向客户端登录的浏览器)发送通知,请向包含userId的协调器actor发送消息(当然还有其余的通知)。该actor将通过userId在地图中找到所有websocket actor并将消息转发给它们。
Play中的websockets的技术方面在文档中描述,您可能已经看过了 - > https://www.playframework.com/documentation/2.5.x/ScalaWebSockets
更新:通过actorRefs
澄清了我的意思是Seq [ActorRef]。