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

Java GWT应用程序中正在运行的客户端数?,java,gwt,Java,Gwt,我有一个GWT客户机服务器应用程序,我想在客户机浏览器标题中显示正在运行的客户机的数量。我知道如何跟踪已连接客户端的数量,但如何跟踪已关闭连接的数量 public class MyServiceImpl extends RemoteServiceServelt implements MyService { [...] static int runningClients=0; @Override public Integer runningClients() {return ++runnin

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

public class MyServiceImpl extends RemoteServiceServelt implements MyService
{
 [...]
 static int runningClients=0;
 @Override public Integer runningClients() {return ++runningClients;}
 // TODO: track closed connections
}
编辑:根据建议,我实现了一个HTTPSessionListener。不幸的是,对于hits和ConnectedClient,它总是返回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>
...
。。。
org.mypackage.server.ActiveClientsListener
...

注意:我的实现是线程安全的,还是必须使字段
易失性
或以不同方式进行同步?

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

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


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

假设每个连接的客户端都打开一个会话,我想我会为此使用一个

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


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

谢谢,我现在就试试这个!不介意等待超时,它不必那么精确。我无法调用
getServlerContext().addListener()
:类型ServletContext的方法addListener(String)未定义。使用类型为
com.google.gwt.user.client.EventListener
java.util.EventListener
的参数时会出现相同的错误,请在部署描述符(web.xml)中添加以下内容:
com.foo.bar.MySessionListener
并确保该类实现了
HttpSessionListener
,不幸的是,它总是返回0。将它添加到XML中真的足够了吗,还是我必须在程序中的某个地方添加侦听器?@kirdie您是否在类(构造函数、sessionDestroyed、sessionCreated方法)中添加了一些日志以查看发生了什么?是的,在web.xml中声明就足够了。请看,谢谢,我现在就试试!不介意等待超时,它不必那么精确。我无法调用
getServlerContext().addListener()
:类型ServletContext的方法addListener(String)未定义。使用类型为
com.google.gwt.user.client.EventListener
java.util.EventListener
的参数时会出现相同的错误,请在部署描述符(web.xml)中添加以下内容:
com.foo.bar.MySessionListener
并确保该类实现了
HttpSessionListener
,不幸的是,它总是返回0。将它添加到XML中真的足够了吗,还是我必须在程序中的某个地方添加侦听器?@kirdie您是否在类(构造函数、sessionDestroyed、sessionCreated方法)中添加了一些日志以查看发生了什么?是的,在web.xml中声明就足够了。另见和