如何使用django channel创建游戏大厅和配对



我正在使用django通道创建一个2人游戏,如井字游戏或跳棋。

我的主要问题是如何保存加入大厅等待配对的玩家的状态。这是我需要在通道消费者的连接方法中做的事情吗?如果不是,如果这里的方法呢?

websocket应该响应客户端发送的信息,而不是运行不断检查用户或数据库条目的循环。当然,我们需要在我们的consumer_consumer_consumer_consumer_consumer_consumer_consumer_queuemanager .py中添加一个新类,但这是一个'QueueManager' websocket,用于管理我们的队列,并为'GameManager' websocket调度初始的join命令。

我们的播放器需要开始发送一个消息到'QueueManager'的websocket。如果玩家已经登录,它会发送一个带有ID的"新加入"命令。如果游戏允许客人,我们在连接时生成新的ID。如果一个游戏房间是开放的或者一个玩家在房间里等待,'QueueManager' websocket发送一个命令'join room integer'。当玩家的代码看到,它发送一个命令到'GameManager'的websocket,告诉它将加入哪个房间。

如果没有可用的房间,告诉用户'no room',然后使用数据库模型打开一个队列,其中每个主键都是常量,并且字段告诉我们队列中有多少用户。每次向该队列添加数据时,都会创建一个不同的数据库模型,该模型具有唯一的数据库主键,其值等于它们在队列中的位置。当玩家收到'no room'时,发送一个命令到'QueueManager' websocket 'checking room',例如每10秒一次。当有一个新房间打开时,'QueueManager' websocket调度'join room integer'命令信号,通过使用恒定的主键减少数据库模型中的用户总数,并使用唯一的主键遍历所有用户数据库模型,并更新他们的userID字段以包含列表中的下一个userID,将所有用户在队列中向前移动一个位置。请记住,这些数据库模型的唯一主键与数据库模型中保存的以0或1开头的用户总数相关联,该数据库模型有一个恒定的主键,您可以随时访问该主键。

最新更新