Django的后台处理
我正在开发一个回合制的网页游戏,所有的世界更新(比如玩家的指令、物理计算、脚本事件等)都会在服务器上进行。目前,我可以在网页请求的回调中简单地更新世界。但是,这种简单的方法根本无法扩展。当我开始同时运行很多游戏时,我不想让我的网页服务器变得很慢。
那么,有什么好的方法可以把负担从网页服务器上分离出去,最好是能在另一台机器上运行的方式呢?
- 一个简单的Python模块,里面有个无限循环?
- 用像Celery这样的分布式任务?
- 某种跨平台的定时任务调度器?
- 还有其他我不知道的花哨的Django功能或第三方库?
我还想通过使用相同的模型层来减少代码重复。这可能意味着我的服务需要访问Django的模型代码,这肯定会影响我如何设计这个服务。
2 个回答
0
我建议你直接用Django的数据库接口来写后端代码(可以看看你manage.py
里的设置代码),然后把它作为一个独立的进程运行,和它进行交互可以用协议缓冲区。这样做的话,想要把它迁移到另一台机器上也很简单。消息传递接口(MPI)也可以考虑。
管道、FIFO(先进先出)和大多数其他进程间通信(IPC)方式都要求两个进程在同一台机器上。
不过我得指出你想法中的一个问题:
不幸的是,这种简单的方法根本无法扩展。当我开始同时运行很多游戏时,我不想让我的网页服务器变得很慢。
如果你同时运行多个游戏,只要把一个游戏的所有部分都放在同一台服务器上,这就不是问题,除非所有游戏都需要一个共同的资源。那样的话,真正的问题就变成了如何在服务器之间进行负载均衡。
6
我觉得你提到的Celery是个不错的选择。它能很好地和你现有的系统配合,支持你将来想要把系统分开的目标,而且它和Django也兼容。