gpt4 book ai didi

Python 游戏服务器 - 优化网络

转载 作者:行者123 更新时间:2023-12-05 06:46:00 25 4
gpt4 key购买 nike

我有一个运行的 Python 游戏服务器。游戏是回合制的。玩家提示短暂的滞后峰值持续了几轮(即,他们的客户被困在等待一段时间,然后突然他们一次收到几轮值(value)的更新)。我希望找到一些方法来提高网络的一致性,但我不确定还需要做什么。

这是我正在做的:

  • 异步套接字
  • 设置了 TCP_NODELAY 标志
  • epoll 用于投票

以下是我收到剧本的方式:

for (fileno, event) in events:
if fileno == self.server_socket.fileno():
self.add_new_client()
elif event & select.EPOLLIN:
c = self.clients[fileno]
c.read() # reads and processes all input and generates all output
...

这是我发送更新的方式:

if turn_finished:
for user in self.clients.itervalues():
for msg in user.queued_messages:
msg = self.encode(msg)
bytes_sent = user.socket.send(msg)
...

每当我写入套接字或从套接字读取时,我都会检查所有字节是否已发送并记录任何套接字错误。这些东西几乎从不出现在日志中。

如果我只调用一次 socket.send() 会更好吗?

我可以在 Linux (Ubuntu) 主机上检查或调整什么吗?

数据延迟到达客户端似乎存在一些问题。任何人都可以提供调试此问题的任何建议吗?


关于发送的消息:

如果玩家闲置,他们通常每回合收到 0-3 次更新。如果玩家正在与其他玩家一起行动,他们通常会在屏幕上收到每个其他玩家 2-3 次更新。更新的长度通常小于 20 个字节。有一些大小为 256 和 500-600 字节的更新(一次仅发送给 1 个玩家)。

通常一次大约有 10-50 个玩家处于事件状态,同一屏幕中的玩家不超过 10 个。


附言- 我用 PyPy 运行。我已经分析过,一切看起来都不错。所有玩家移动都在 <3 毫秒内处理,服务器大部分时间都处于空闲状态。

最佳答案

听起来您需要调试客户端并找出它在“卡住”时正在做什么。

只有了解了原因,才能找到解决办法。

关于Python 游戏服务器 - 优化网络,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19716545/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com