在线持久游戏基础设施
epicserver的Python项目详细描述
EPIC服务器
epic服务器是运行代码的运行时/工具,它提供多进程和 多机执行。它处理自动发现和 在一个易于使用的中传递和抽象这些信息,以便您能够集中精力 编写代码以运行您的服务。
注:这是Alpha软件。下面介绍0.1中的特性 发布,项目目前处于可运行状态,但不包括 此时的多机/进程执行,预计 在正式发布前不久完成
示例
from epicserver.objects import Entity class GameEntity(Entity): pass class Player(GameEntity): score = 0 async enter_level(self, barrels): for barrel in barrels: # shoot the barrel killed = await barrel.on_hit() if killed self.score += 1 async get_score(self): return self.score class Barrel(GameEntity): team = "Society for the prevention of cruelty to barrels' async on_hit(self): print("What, did you expect me to explode?") return False async def setup(pool) pool.bind(GameEntity) barrels = [pool.Barrel[i] for i in range(30)] player = pool.Player['Bob: Slayer of armoured cylinders'] await player.enter_level(barrels) score = await player.get_score() print(f"New High scrore for player: {score}")
功能
- 基于原始异步/等待
- 类似于普通异步方法调用的基于对象的消息传递
- 自动"织物"创建,将多个进程粘在同一个进程上 或单独的机器。
- 自动发现机器
- 虚拟参与者/对象,不需要显式实例化
- 独立和可插入的系统允许在不同的实现中交换 (如串行化、网络化)
- 自动对象到磁盘的距离(也称为"保存")
- 对象的垃圾收集
- python>;=3.6仅支持
用例
- 分布式游戏后端
- 代理模拟
- 通信{平台(即时消息,类似twiter的系统)
- 基于图形的处理
Epic服务器非常适合任何消息传递量大且围绕其设计的应用程序 需要通信的对象
epix服务器不是python获得并发性的"插件"解决方案。 寻求利用epic服务器并行性的应用程序需要 为了使用它而写的。使用fork或threads的代码可以通过 使每个fork/thread成为一个单独的对象),但是epic服务器关注的是 高度并行(执行上下文是数字的10到100倍 CPU的)和短暂的"计算"
安装
EpicServer借鉴了许多不同语言和库的概念, 以下是短名单
- 来自微软研究中心的奥尔良(dotnet/c)。用作后面的机器 光环5和其他游戏
- 二郎
- 无堆栈python
- 异步
- 桑西奥
- zope/zodb
虽然上述许多概念可以直接移植到python中, 修改概念,使其感觉与python程序员相似 为了使最终的框架更像蟒蛇 更好地适应现有的python生态系统。
植入
epic服务器由运行在主线程中的事件循环组成,即 负责执行工作,以及几个后台IO线程 负责发送和接收IO请求以及处理IO(两者 磁盘和网络)。其他线程可用于其他阻塞调用 可能实现数据库访问等功能。
所有对这些IO线程的访问都不是通过消息传递,而是通过 事件循环