我正在使用Spring Boot来构建REST API。部分站点使用WebSocket进行客户端 - 服务器通信,以便为两个用户创建“房间”。客房需要通过API订购特定的时间和持续时间,例如21-12-2016 11:00 1小时。在webapp中,我从现在开始设置超时,到显示弹出窗口的“加入房间”的有序时间。当用户单击此按钮时,将创建房间。但我需要在第二个用户离线时禁用按钮。
如何确定用户是否在Spring WebSockets中处于联机状态?
我的解决方案是监听SessionConnectEvent和SessionDisconnectEvent,并将用户状态(在数据库中)更新为在线或离线。它仅在用户只有一个websocket连接时才有效。因为如果他有例如在同一页面上打开2个选项卡,然后建立2个连接(状态=在线)。当用户关闭一个选项卡时,当他处于联机状态(仍然打开一个选项卡)时,会触发断开连接事件并将状态更改为脱机状态。 SessionDisconnectEvent。
此解决方案的修复方法是在SessionConnectEvent上保存数据库对session_id和user_id,并在SessionDisconnectEvent上将其删除。
有没有更好的方法来确定用户是否在线?