我有一个 GWT 客户端-服务器应用程序,我想在客户端浏览器标题中显示正在运行的客户端数量。我知道如何跟踪连接客户端的数量,但如何跟踪关闭的连接数量?
public class MyServiceImpl extends RemoteServiceServelt implements MyService
{
[...]
static int runningClients=0;
@Override public Integer runningClients() {return ++runningClients;}
// TODO: track closed connections
}
编辑:按照建议,我实现了一个 HTTPSessionListener。不幸的是,它总是为 hits 和 connectedClients 返回 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>
...
PS:我的实现是线程安全的还是我必须制作字段volatile
或以不同的方式同步?