gpt4 book ai didi

java - 将连接客户端的历史记录保存到 Web 服务 jax-ws

转载 作者:搜寻专家 更新时间:2023-11-01 03:51:10 24 4
gpt4 key购买 nike

我有一款多人游戏,我想保留已连接玩家的历史记录,以了解游戏何时开始。我使用了 HttpSession 但它不能解决我的问题。我还在 web 服务中创建了一个静态的玩家 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;

}

最佳答案

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

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

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


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

关于java - 将连接客户端的历史记录保存到 Web 服务 jax-ws,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27582621/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com