在线持久游戏基础设施

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线程的访问都不是通过消息传递,而是通过 事件循环

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java传递实现接口的内部类   java为什么managedbean方法在post请求中的过滤器调用之前调用   java Android应用程序在Android M,O上崩溃,登录A/libc时出错:tid 17938中的致命信号11(SIGSEGV),代码2,故障地址0x343a2944   java JPA存储库。findByAll()返回null,但数据库中存在所有内容   用于发送电子邮件的java Ant脚本   Java小程序HTML页面发生了奇怪的事情   在Postman的请求正文中传递多个JSON数据,并使用Jersy(JXRS)进入Java Rest API   无法强制转换java DAO类   10分钟后重新连接java   正则表达式如何在java中选择字符串直到某个字符   java我的输出有一些问题   Objective中的java时间段   java如何在新屏幕上基于按钮单击在webview中打开url   java哪个selenium版本与Firefox ESR 45.2.0兼容   java无法使用Apache Camel 3.1.0将XML转换为JSON