一开始想用session监听器,不过有过期时间,并非实事。而且,如果不用jsp,就需要写个rest服务,供前段轮询调用接口,比如5秒一次,来刷新在线人数。影响性能。后来想到用WebSocket来做。刚好之前有用过socketio来推送消息,于是敲定方案。
我使用的是开源库,https://github.com/mrniko/netty-socketio, 有近3000个star,还是不错的。
因为业务上需求是跟进登录账号来统计,而对登录IP、浏览器不做区分,即同一个账号,无论在哪里登录,总数都算1.基于次,前端连接时只需把登录账号传到后台即可。
1. 后台服务OnlineUserCounter.java:
public class OnlineUserCounter {
private static SocketIOServer socketServer = null;
/**
* 在线用户数
*/
public static Set<String> userSet = new HashSet<>(500);
private static JSONObject result = new JSONObject();
/**
* 客户端计数
*/
public static AtomicInteger clientCount = new AtomicInteger();
private static SimpleDateFormat dateformat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
public st