【问题标题】:Tornado based python game server latency problem on amazon cloud亚马逊云上基于 Tornado 的 Python 游戏服务器延迟问题
【发布时间】:2021-07-25 09:14:07
【问题描述】:

我在亚马逊云 1gb 内存和 10gn 硬盘上托管了基于龙卷风的游戏服务器。我每天有 500 个用户,并且在给定的时间并发用户是 30+。用户遍布世界各地,我在美国西部托管云机,因为大多数用户来自美国。 我面临网络延迟问题。当我有单个用户的响应时间为 1 秒时,这也很高,但随着用户移动到 10+,此响应时间开始下降到 2 秒。对于 50+ 用户,它的响应时间为 8 秒。 我做了测试并编写了测试脚本。 测试1。

  1. 使用与上述相同的测试脚本进行测试,在我的本地机器主代码上进行了测试,在本地和测试脚本上运行的本地延迟小于 1000 毫秒(90% 中值 220 毫秒)

  2. 在云上运行相同的代码,在相同的云上测试脚本相同的结果

  3. 在云上运行游戏服务器并在本地延迟 8 秒运行脚本

【问题讨论】:

    标签: networking amazon-ec2 tornado latency


    【解决方案1】:

    1.网络 I/O

    如果您在请求处理程序中执行网络绑定操作(例如连接到数据库,或向另一个 API 发送请求),则对这些任务使用 await 语句,以便 Python 可以暂停协程并异步处理其他请求。

    2。 CPU 任务和磁盘 I/O

    如果您正在执行 cpu-bound 操作(除网络 I/O 之外的任何代码都需要花费几毫秒才能运行),那么请使用 IOLoop.run_in_executor 在单独的线程中运行这些任务。这将释放主线程,以便 CPU 可以运行其他任务。

    Tornado 是一个单线程服务器。这意味着 CPU 在给定时间只能运行一件事。因此,如果单个响应需要 220 毫秒的 CPU 时间,并且如果您有 10 个连接的客户端,则为第 10 个客户端提供服务将需要超过 2 秒的时间。而这一次只是随着客户端数量的增加而增加*(尽管并不总是成比例,因为 Python 可能会重用 CPU 缓存)。

    云服务器上的 CPU 似乎不如您的个人 CPU 快,因此延迟增加。

    【讨论】:

      猜你喜欢
      • 2013-02-20
      • 2013-07-11
      • 1970-01-01
      • 1970-01-01
      • 2019-10-09
      • 2011-10-26
      • 2015-10-30
      • 1970-01-01
      • 2016-01-06
      相关资源
      最近更新 更多