我一直在用WebSocket API来解决一些问题。
我有一个@ServerEndpoint注释类,我有一个静态字段。
private static final Map<String, Session> openSessions = Collections.synchronizedMap(new HashMap<String, Session>());
每当触发open事件时,我都会向列表中添加一个新会话。 此外,我有一个静态方法来向连接的客户端发送消息。 但是,openSessions大小在该静态方法中始终为0。
public static void sendObject(String message) {
logger.info("Sessions: " + openSessions.size());
...
}
我无法弄清楚为什么openSessions没有任何对象。
由于 爱德蒙
答案 0 :(得分:0)
我试着根据你描述的内容编写代码:
@ServerEndpoint("/testendpoint")
public class TestWSEndpoint {
private static final Logger logger = Logger.getLogger(TestWSEndpoint.class.getName());
private static final Map<String, Session> openSessions = Collections.synchronizedMap(new HashMap<String, Session>());
@OnMessage
public static void sendObject(String message) {
System.out.println("server got message; Sessions: " + openSessions.size());
logger.info("Sessions: " + openSessions.size());
}
@OnOpen
public void onOpen(Session session) {
System.out.println("server connected");
openSessions.put(String.valueOf(openSessions.size()), session);
}
}
连接到serverendpoint并发送测试字符串后,我得到了输出:
server connected
server got message; Sessions: 1
这应该意味着openSession的大小增加。
那么我们的代码之间的区别是什么?