Python Flask Socketio:管理游戏大厅

Python Flask Socketio:管理游戏大厅,python,flask,multiplayer,flask-socketio,Python,Flask,Multiplayer,Flask Socketio,这是一个有点理论性的问题,;我仍处于我正在尝试制作的应用程序的设计阶段 我有一个支持通用WebSocket的前端和一个使用Flask running Flask SocketIO编写的后端WSGI。这个应用程序是一个非实时的游戏,所以我需要设计一个系统,允许用户加入短寿命的游说团 我知道SocketIO的房间是如何工作的,但它没有说明服务器将如何跟踪存在哪些大厅,以及它如何独立地为每个大厅运行游戏逻辑,如果存在多个大厅,则不会崩溃和烧毁。线程可能是一种解决方案,但我不确定在这种情况下如何实现 我

这是一个有点理论性的问题,;我仍处于我正在尝试制作的应用程序的设计阶段

我有一个支持通用WebSocket的前端和一个使用Flask running Flask SocketIO编写的后端WSGI。这个应用程序是一个非实时的游戏,所以我需要设计一个系统,允许用户加入短寿命的游说团

我知道SocketIO的房间是如何工作的,但它没有说明服务器将如何跟踪存在哪些大厅,以及它如何独立地为每个大厅运行游戏逻辑,如果存在多个大厅,则不会崩溃和烧毁。线程可能是一种解决方案,但我不确定在这种情况下如何实现

我更多的是寻找正确方向和想法的指针,而不是具体的答案;我试过查看Flask SocketIO聊天室示例的大量示例,但其中许多示例都涉及将聊天历史存储在数据库中,我希望避免这种情况,因为一旦所有人都离开,大厅就应该不复存在,但删除数据库对这些示例来说太麻烦了


TL;DR:对于Flask SocketIO服务器来说,以某种可扩展和健壮的方式独立跟踪和执行不同大厅上的游戏逻辑的最佳方式是什么?

您的游戏逻辑到底是什么?您是否希望在聊天室创建后某个时间加入聊天室的用户能够访问聊天历史记录?如果是这样,您需要一个“数据存储”,但不一定需要一个数据库。如果您想让服务器跟踪游戏中存在哪些游说团体,那么您需要管理某种状态,从而拥有某种“数据存储”,即使它只是在内存中。对数据库的厌恶是什么?你肯定需要一个数据存储。如何以及持续多长时间完全取决于您。然后,我会在我的flask应用程序中创建可以访问此数据存储的模型。当某些路由被调用时(当用户从前端发射套接字MSG时),Flask可以调用这些处理游戏逻辑的模型。然后,这些模型可以进入数据存储,获取给定房间当前状态的信息。数据存储不需要是一个数据库,它可以是一个带有json对象的文本文件,或者只是另一个在内存中存储内容的python程序等等。重要的是,数据存储与Flask是分开的,即使Flask服务器关闭,数据存储也会保持不变。然后,这些模型充当与数据存储通信的接口。当我构建需要状态管理的概念证明时,我通常只在文件中存储JSON对象。一点也不可扩展,但非常容易和快速启动。键可以是聊天室id,值可以是所有数据的另一个对象。是的,这就是您想要做的。请注意,现成的数据库已经作为一个单独的进程,通常提供一个python库,用于在实际数据存储之间传递消息。我想说的是,您提出的解决方案正是Redis、MySQL、,在任何情况下,您都不必阻止对外部进程的过程调用,如果您愿意,您可以进行异步写入/读取。开发人员通常会对db读/写进行“阻塞”调用,但您可以选择不这样做。还要注意的是,如果您的状态存储在内存中,它不会减慢您的请求速度。如果你正在写文件,它甚至不会显著降低你的请求速度。你的游戏逻辑到底是什么?您是否希望在聊天室创建后某个时间加入聊天室的用户能够访问聊天历史记录?如果是这样,您需要一个“数据存储”,但不一定需要一个数据库。如果您想让服务器跟踪游戏中存在哪些游说团体,那么您需要管理某种状态,从而拥有某种“数据存储”,即使它只是在内存中。对数据库的厌恶是什么?你肯定需要一个数据存储。如何以及持续多长时间完全取决于您。然后,我会在我的flask应用程序中创建可以访问此数据存储的模型。当某些路由被调用时(当用户从前端发射套接字MSG时),Flask可以调用这些处理游戏逻辑的模型。然后,这些模型可以进入数据存储,获取给定房间当前状态的信息。数据存储不需要是一个数据库,它可以是一个带有json对象的文本文件,或者只是另一个在内存中存储内容的python程序等等。重要的是,数据存储与Flask是分开的,即使Flask服务器关闭,数据存储也会保持不变。然后,这些模型充当与数据存储通信的接口。当我构建需要状态管理的概念证明时,我通常只在文件中存储JSON对象。一点也不可扩展,但非常容易和快速启动。键可以是聊天室id,值可以是所有数据的另一个对象。是的,这就是您想要做的。请注意,现成的数据库已经作为一个单独的进程,通常提供一个python库,用于在实际数据存储之间传递消息。我想说的是,您提出的解决方案正是Redis、MySQL、,在任何情况下,您都不必阻止对外部进程的过程调用,如果您愿意,您可以进行异步写入/读取。开发人员通常会对db读/写进行“阻塞”调用,但您可以选择不这样做。还要注意的是,如果您的状态存储在内存中,它不会减慢您的请求速度。如果您正在写入文件,它甚至可能不会显著降低您的请求速度。