Clojure的棋盘游戏状态设计

时间:2014-04-05 07:26:11

标签: sockets tcp clojure

我尝试使用Clojure中的简单TCP网络设计基于回合制的多人棋盘游戏(Carcassonne)的服务器实现。现在我不想要持久的持久状态(没有后端数据库)。 鉴于套接字的并发性,我目前看到了维持游戏/转弯状态的问题:每个tcp拆分器消息都会调度一个函数,该函数可以让任意顺序状态发生变化。我使用atom使用swap来保持状态,并使用函数来修改它。尽管原子地改变状态是正确的,但是没有给出全局顺序。同一玩家的第二条消息或另一玩家的另一条消息可以在实际玩家的第一条消息之前被处理,从而导致一个腐败的状态。

所以我的问题是:如何在没有数据库的情况下使用Clojure中的TCP网络维护正确的状态。

我之前已经问过有关游戏状态的类似问题,但我认为他们没有为我的案例提供答案。

1 个答案:

答案 0 :(得分:0)

Wikipedia说“TCP提供可靠的,有序的和错误检查的传送......”。因此,可以按顺序处理通过同一套接字传递的消息。