【发布时间】:2015-07-20 08:52:00
【问题描述】:
我正在开发一个基于 Spring-MVC 的网络应用程序,该应用程序使用 Cometd 进行聊天。为了实时管理哪个用户在线,我们会在用户在线时发送通知。因此,当窗口关闭时,不会出现通知,并且在 30 秒后确定用户离线或无法访问。
现在,当用户使用多个浏览器时,就会出现问题。让我们现在保留2。因此,10 分钟后,我们将用户状态设置为“远离键盘”(AFK)。但是如果用户在一个浏览器中在线,那么我们会得到一个闪烁的状态,因为浏览器处于“空闲模式”几秒钟,我们会得到一个 AFK,并且从活动机器我们得到一个“可用”状态。
我们如何解决这个问题?任何想法,建议。我想用一个布尔标志,加上IP地址,在覆盖通知之前会检查它,但它有一个过时通知的问题。
这是我向所有听众(用户的朋友)发送在线通知的代码。
代码:
@Listener(value = "/service/online")
public void OnlineNotifications(ServerSession remote, ServerMessage.Mutable message) {
Person sender = this.personService.getCurrentlyAuthenticatedUser();
Map<String, Object> input = message.getDataAsMap();
String onlineStatus = (String) input.get("status");
Map<String, Object> output = new HashMap<>();
output.put("status", onlineStatus);
output.put("id", sender.getId());
ServerChannel serverChannel = bayeux.createChannelIfAbsent("/online/" + sender.getId()).getReference();
serverChannel.setPersistent(true);
serverChannel.publish(serverSession, output);
}
欢迎任何想法。非常感谢。 :-)
【问题讨论】: