java - 如何为服务器端的每个 websocket session 创建相互映射?

标签 java spring session jakarta-ee

我使用 javax-inject 中的 websockets 和 Singleton 制作了一个应用程序。然而,对于每个新的 websocket session ,都会创建新的 HashMap 。我应该怎么做才能为所有 session 创建相互映射?

import javax.inject.Singleton;
import javax.websocket.OnClose;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.server.ServerEndpoint;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

@ServerEndpoint(value = "/game_endpoint")
@Singleton
public class WaterWorldGame {
    Map<Session, Player> players = new HashMap<>();
    ...
}

javax-inject 中是否有任何注释,或者使用 Spring 制作会更容易吗?

最佳答案

我认为容器为每个客户端创建端点的新实例,这就是创建新 HashMap 的原因。

您可以将端点类和单例分开。

@Singleton
public class WaterWorldGame {
    Map<Session, Player> players = new HashMap<>();

    // getter, setter
}


@ServerEndpoint(value = "/game_endpoint")
public class GameEndpoint{

   @EJB
   WaterWorldGame game;     

}

关于java - 如何为服务器端的每个 websocket session 创建相互映射?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31149947/

相关文章:

java - 使用并行流阻塞所有其他线程

java - Arraylist 索引越界

java - 如何在android中检测用户何时连接到wifi或移动互联网

java - JUnit Spring - HSQLDB 在测试后不会关闭

spring - 升级到 Spring boot 2.x 后请求映射不起作用

java - Spring Boot 升级到最新

javascript - 如何使用 AngularJS 客户端在 Loopback 应用程序内创建 session ?

java - 在java中使用字符串元素对集合进行排序

c# - 如何在 session 中保存 SQL 查询以备后用

php - 如何在用户登录时使用 PHP session 显示隐藏内容