【问题标题】:Python Twisted Socket ServerPython Twisted Socket 服务器
【发布时间】:2014-01-04 21:01:01
【问题描述】:

我已经使用这个 Twisted Python TCP 套接字服务器已经有一段时间了,现在我开始真正了解它了。我的问题是我一次有 350 多个(根据日期和时间给予或接受)客户,有时我会有很大的滞后。我所说的延迟是指有时在一个“房间”中(基本上是一个头像聊天,用户有库存、朋友、房子等),有任何数量的用户(通常就像房间里有 10 多个用户一样)通常会有每分钟左右有 2-5 秒“冻结”。冻结我的意思是没有数据包被发送,没有人可以看到任何人移动他们的角色、谈话或任何东西。解冻后,就像所有数据包一次发送一样,您可以看到每个人的消息和内容。

我的套接字服务器基于此:https://github.com/jesstess/twisted-network-programming-essentials-examples/blob/master/Chapter11-Testing/chatserver.py

我想知道我可以做些什么来防止延迟。我在考虑多线程,但是我将如何在上面的示例中这样做呢?几周前,我在网上拥有的客户最多的是 451,但我认为这不会很快发生。

如果您对我的问题感到困惑 - 基本上我是在问如何让服务器更好地处理约 350 个客户端并防止房间内所有客户端出现延迟/冻结。

编辑:与那个例子不同,我在底部添加了这个:

ServerCL = GameServer(sys.argv[1])
reactor.listenTCP(int(config.get('GameServer1_' + str(sys.argv[1]), 'port')), ServerCL)
reactor.listenTCP(int(config.get('GameServer2_' + str(sys.argv[1]), 'port')), ServerCL)
reactor.run()

【问题讨论】:

  • 我相信twisted在底层已经是多线程的,所以我不确定你会从中得到多少(请随时检查......它已经自从我玩它以来已经有一段时间了)。隔离“为什么”它很慢绝对是正确的方法......
  • twisted 不是线程化的,而是基于事件的。这意味着一切都在同一个线程中运行,如果事件处理程序阻塞或花费太长时间,所有连接都会受到影响。
  • 是否有可能不使用 Twisted 作为我的套接字服务器基础会使它变得更好?也许使用普通的套接字库?
  • 在不知道原因的情况下,无法预测任何特定更改会产生什么影响。您遇到的问题可能是因为某些代码在某处阻塞了事件循环:在这种情况下,切换到多线程服务器可以 消除问题。另一方面,它的阻塞方式可能仍然会影响多线程服务器。也许问题完全是由其他原因引起的,例如导致垃圾收集器运行很长时间的对象泄漏。切换到多线程服务器无法解决此类问题。
  • 最终,如果您想知道 change 究竟是什么fix,您必须了解问题的原因。制作(和分享)一个演示问题的最小示例 (sscce.org>) 将是朝着这个目标迈出的良好一步。

标签: python sockets twisted lag


【解决方案1】:

这些“冻结”的发生可能有多种原因。很可能这不是 Twisted 本身内部的东西,而是您的应用程序中的东西,它需要 2-5 秒并阻止服务器执行其他任何操作。

听起来您有一个庞大而复杂的应用程序,所以与其猜测它可能是什么,我建议您使用像twisted_hang 这样的工具来确定您的应用程序卡在哪里;这应该让您对可以更改的内容有所了解。

【讨论】:

  • 谢谢!我一定会调查并尝试的。
  • 只是想知道,但你以前用过它吗?我现在正在使用它,并且得到了大量的输出,例如:image。我正在使用他们在 github 中的默认设置:watcher = HangWatcher(0.1, 0.5) watcher.start()
  • 有人有什么想法吗..?
  • 该输出告诉您的是,cursor.execute 是阻止您的程序的原因。这并不奇怪!执行一些 SQL 是对外部系统(您的数据库)的阻塞网络请求,这可能会非常慢。你需要做非阻塞的数据库 I/O;看看 Twisted 内置的 twisted.enterprise.adbapi twistedmatrix.com/documents/13.2.0/core/howto/rdbms.html , adbapi2 from pypi.python.org/pypi/twextpy , or pypi.python.org/pypi/alchimia .
  • 谢谢,我现在就去研究一下。
猜你喜欢
  • 1970-01-01
  • 2012-10-27
  • 2013-12-24
  • 2023-03-03
  • 1970-01-01
  • 2018-06-24
  • 1970-01-01
  • 1970-01-01
  • 2012-12-16
相关资源
最近更新 更多