使用websocket时,希望在OnOpen时在roomList里添加新的连接,存在static里面,怎么实现?
public class Socket {
//静态变量,用来记录当前在线连接数。应该把它设计成线程安全的。
private static int onlineCount = 0;
/*websocket 客户端会话 通过Session 向客户端发送数据*/
private Session session;
/*线程安全set 存放每个客户端处理消息的对象*/
private static CopyOnWriteArraySet<Socket> webSocketSet = new CopyOnWriteArraySet();
/*websocket 连接建立成功后进行调用*/
private static Map<String, String> userList = new HashMap<String, String>();
private static SimpleDateFormat df = new SimpleDateFormat("HH:mm:ss");//创建时间格式对象
/**
* 功能:创建一个房间的集合,用来存放房间
* concurrent包的线程安全Set,用来存放每个客户端对应的MyWebSocket对象。
* 若要实现服务端与单一客户端通信的话,可以使用Map来存放,其中Key可以为用户标识
*/
private static ConcurrentHashMap<String, ConcurrentHashMap<String, Socket>> roomList = new ConcurrentHashMap<String,ConcurrentHashMap<String, Socket>>();
//重新加入房间的标示;
private int rejoin = 0;
static {
roomList.put("room1", new ConcurrentHashMap<String, Socket>());
roomList.put("room2", new ConcurrentHashMap<String, Socket>());
roomList.put("wuxian20200424", new ConcurrentHashMap<String, Socket>());
}
@OnOpen
public void onOpen(@PathParam(value = "info") String param, Session session) {
}
###
websocket可以用连接的session传输数据,不需要用socket
roomId和userId,需要你自己根据逻辑获取,是不是放在param里的?
@OnOpen
public void onOpen(@PathParam(value = "info") String param, Session session) {
String roomId = ...;
String userId = ...;
roomList.get(roomId).put(userId, session);
}