静态变量在ServerEndpoint java中不起作用

时间:2014-12-02 16:25:52

标签: websocket

我一直在用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没有任何对象。

由于 爱德蒙

1 个答案:

答案 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的大小增加。

那么我们的代码之间的区别是什么?