【问题标题】:keep history of connected clients to a web-service jax-ws将已连接客户端的历史记录保存到 Web 服务 jax-ws
【发布时间】:2015-02-19 08:49:35
【问题描述】:

我有一个多人游戏,我想保留已连接玩家的历史记录,以了解游戏应该何时开始。 我使用了 HttpSession 但它不能解决我的问题。 我还在网络服务中创建了一个静态的 ArrayList 播放器,但它无法解决我的问题。 :( 还有什么想法吗?

     @Resource
    private WebServiceContext wsContext;    
   @WebMethod
    public PlayerModel connect(String PlayerName) {
        PlayerModel playerModel = null;
        Players players = new Players() ;
        ArrayList<PlayerModel> playerList = players.getPlayers();

        if (playerList.isEmpty()) {
            System.out.println("from service :No payer yet");
             boardModel = new BoardModel(6, 7);
            session.setAttribute("boardModel", boardModel);



            boardModel.setPlayer1(PlayerName);
            playerModel = new PlayerModel(1, PlayerName, boardModel);
            playerList.add(playerModel) ;
        } else if (playerList.size() == 1) {
            boardModel.setPlayer2(PlayerName);
            playerModel = new PlayerModel(2, PlayerName, boardModel);
          playerList.add(playerModel) ;
        }
        return playerModel;

    }

另一种方法

 @Resource
 private WebServiceContext wsContext;   
 BoardModel boardModel;
 HttpSession session;

@WebMethod
public PlayerModel connect(String PlayerName) {
    MessageContext mc = wsContext.getMessageContext();
    session = ((HttpServletRequest) mc.get(MessageContext.SERVLET_REQUEST)).getSession();

    if (session == null) {
        System.out.println("from service :No payer yet");
         boardModel = new BoardModel(6, 7);
         session.setAttribute("boardModel", boardModel);
        boardModel.setPlayer1(PlayerName);
        playerModel = new PlayerModel(1, PlayerName, boardModel);
       session.setAttribute("1", playerModel);
    } else if (session.getAttribute("1" != null) {
        boardModel.setPlayer2(PlayerName);
        playerModel = new PlayerModel(2, PlayerName, boardModel);
        session.setAttribute("2", playerModel);
    }
    System.out.println("from service  : player" + PlayerName);
    return playerModel;

}

【问题讨论】:

    标签: java web-services jakarta-ee soap jax-ws


    【解决方案1】:

    您的代码似乎没有在多个地方加起来。

    1. 您的第一个代码块,除了缺少重要位之外,不可能跨多个请求工作。

      • playerList 看起来几乎总是空的
    2. 会话感知 JAX-WS 服务本身对您没有帮助。根据定义,会话与单个用户有关。如果您没有额外的工作,就无法在多个用户之间共享一个用户的 Web 服务会话


    您的代码中一个明显的缺陷是您没有识别游戏实例当玩家请求连接时,他们应该通过gameId 请求连接到现有游戏或创建游戏。。如果没有标识特定游戏的令牌,您将很难将多个用户连接到同一个游戏。 connect 应该有(过于简单的)签名connect(String gameId, String playerName)gameIds 的列表可以由 DAO 管理,在 Web 服务端点的上下文之外。这样,老玩家或新玩家可以通过提供已知的gameId 来宣传他们的存在,并且您可以跟踪连接到特定gameId 的用户

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-12-25
      • 1970-01-01
      • 2018-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多