Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用RESTAPI为每个用户创建不同的ressource_Java_Angular_Rest - Fatal编程技术网

Java 如何使用RESTAPI为每个用户创建不同的ressource

Java 如何使用RESTAPI为每个用户创建不同的ressource,java,angular,rest,Java,Angular,Rest,在一个学校项目中,我们用Java编写了一个游戏实现,并通过Angular显示了实际的游戏。 我们已经对代表实际游戏的游戏对象进行了编码,并创建了一个“GameSource”类,该类允许我们通过REST调用操作该类中的游戏对象参数,如下所示: @PUT @Path("moove/{x1}/{x2}/{y1}/{y2}") @Produces(MediaType.APPLICATION_JSON) public Response play(@PathParam("x1") final int old

在一个学校项目中,我们用Java编写了一个游戏实现,并通过Angular显示了实际的游戏。 我们已经对代表实际游戏的游戏对象进行了编码,并创建了一个“GameSource”类,该类允许我们通过REST调用操作该类中的游戏对象参数,如下所示:

@PUT
@Path("moove/{x1}/{x2}/{y1}/{y2}")
@Produces(MediaType.APPLICATION_JSON)
public Response play(@PathParam("x1") final int oldX, @PathParam("x2") final int newX, @PathParam("y1") final int oldY, @PathParam("y2") final int newY) {
    if (game.getBoard().getPiece(oldX, oldY).hasBall()) {
        game.play(new MoveBall(oldX, oldY, newX, newY));
    } else {
        game.play(new MovePion(oldX, oldY, newX, newY));
    }
    game.flushUndo();
    if (game.isFinished().isPresent()) {
        return Response.ok().entity(game.isFinished().get()).build();
    }
    return Response.ok().entity(game).build();
}
如您所见,我们只是调用游戏对象上的方法并返回游戏,以便通过Angular显示它。 但问题是,这个对象在每个用户之间共享,这意味着两个人不能同时玩


我已经编写了一个多线程“类似云”的服务,它使用套接字并在每次有人连接到这个套接字时启动一个新线程来处理一个新用户,但我不知道如何使用REST API,即使在这种情况下我应该使用REST API。欢迎您提供任何建议,谢谢

您的问题与角度或休息无关

问题是您的“游戏”实例在所有会话之间共享。服务器上的每个用户都需要一个游戏实例,有几种方法可以实现这一点


我的建议是创建某种“游戏商店”,它将使用会话id来存储游戏实例。根据您使用的框架,您可能已经有了一个名为JSESSIONID的cookie,用于标识访问Rest服务的不同用户。

每个用户都需要许多
游戏
对象。这意味着您需要一个有状态的Rest服务,尽管它违背了Rest()的主要思想

无论如何,您可以通过添加一种身份验证方法。有关详细信息,请参见此处:

然后,您可以将所有游戏存储在一些数据结构中,如
Map
,并为每个用户获取必要的游戏


查看有关Rest中状态的更多信息:

这是我最后提供的解决方案,但我发现这很难看,这是因为Rest应该是无状态的,谢谢,创建状态完整服务的最佳方法是使用(web)套接字,对吗?@NohTow是的,我认为套接字这是一种很好的方法。还需要注意的是,如果你的应用程序很大并且你有大量的数据要存储,你就应该把REST服务当作数据库来存储用户和游戏的数据(还有其他的东西)。因为所有状态都存储在数据库中,而不是存储在服务中,所以它仍然是无状态的。这取决于你。希望有帮助:)好的,谢谢!:)您知道有没有一种方法可以通过套接字发送的已定义请求来编写服务?还是每次我都需要发送命令并进行分析?不确定我是否理解正确。。编写服务的方法有很多,客户端可能是浏览器、套接字,甚至是其他服务。所以如果你有更多的问题要问,最好把它作为一个新问题发布。我相信有很多人可以提出一个好的解决方案;)好的,谢谢,现在我明白了,只有当我需要无状态服务时才应该使用REST,否则我肯定会使用与套接字相关的连接。:)