gpt4 book ai didi

java - GWT 应用程序中正在运行的客户端数量?

转载 作者:行者123 更新时间:2023-11-30 07:25:59 26 4
gpt4 key购买 nike

我有一个 GWT 客户端-服务器应用程序,我想在客户端浏览器标题中显示正在运行的客户端数量。我知道如何跟踪连接客户端的数量,但如何跟踪已关闭连接的数量?

public class MyServiceImpl extends RemoteServiceServelt implements MyService
{
[...]
static int runningClients=0;
@Override public Integer runningClients() {return ++runningClients;}
// TODO: track closed connections
}

编辑:按照建议,我实现了一个 HTTPSessionListener。不幸的是,它总是为命中和已连接的客户端返回 0。

import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

public class ActiveClientsListener implements HttpSessionListener
{
private static long hits = 0;
private static long numberOfConnectedClients = 0;

public static long hits() {return hits;}
public static long numberOfConnectedClients() {return numberOfConnectedClients;}

@Override public synchronized void sessionCreated(HttpSessionEvent arg0)
{
hits++;
numberOfConnectedClients++;
}

@Override public synchronized void sessionDestroyed(HttpSessionEvent arg0)
{
numberOfConnectedClients--;
}
}

web.xml

...
<listener>
<listener-class>org.mypackage.server.ActiveClientsListener</listener-class>
</listener>
...

P.S.:我的实现是线程安全的,还是我必须使字段 volatile 或以不同方式同步?

最佳答案

假设每个连接的客户端打开一个 session ,我想我会使用 HttpSessionListener为此目的。

当一个 session 被创建时,你增加一个计数器,每当它被销毁时,减少它。确保同步对变量的访问。

当然,只要 session 超时,计数器就会减少,这可能是“为时已晚”。但是,您可以通过在用户离开您的应用程序(使用 invalidate() )时显式销毁 session (session. addWindowClosingHandler ) 来改进这一点。

关于java - GWT 应用程序中正在运行的客户端数量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10600652/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com