【发布时间】:2011-03-08 21:12:03
【问题描述】:
我在这里的第一个问题,所以请放轻松。
这是我的情况:
我正在使用 Twisted 框架在 Python 中创建一个网络游戏。游戏通过一个端口上的 TCP 连接到主服务器(连接保持活动状态以进行身份验证),然后您可以在另一个端口上加入网络服务器。目前,网络和主服务器程序都在同一台远程机器上运行。
到目前为止,几乎所有东西都运行良好,至少在通过 Python 解释器运行游戏时。在这种情况下,连接到两台服务器总是可以正常工作。问题仅在使用 py2exe 为客户端创建独立可执行文件后才开始。
在我的开发机器上,运行可执行文件将允许我启动游戏、连接到主服务器并对其进行身份验证。 Wireshark 告诉我连接保持活动状态,并且定期轮询正在被确认。到目前为止,一切都很好。但是当我尝试连接到网络游戏服务器(相邻端口上的第二个 TCP 连接)时,结果不一致。大约一百分之一的时候它会起作用。剩下的时间大约是 50/50 之间什么都不做(Twisted 不会触发任何回调),或者返回“用户超时导致连接失败”。半秒内出错。
有趣的是,Wireshark 甚至没有为这些失败的连接“尝试”显示任何传出的 TCP 数据包,无论它们是返回错误还是什么都不做。
然后它变得更奇怪了,因为当我在另一台测试机器上运行完全相同的游戏客户端可执行文件时,一切正常。那里没有任何连接问题,它每次都能正常工作。两台机器都运行原来的 Windows 7,开发机器是专业版,另一个是家庭版。
我还应该指出,在本地运行游戏服务器,即使在与客户端相同的机器上(连接到“localhost”)对这个问题没有影响 - 症状保持不变。
那么这里可能发生了什么?
【问题讨论】:
-
尝试比较两台机器上的 Python 环境,并确保您的 py2exe 可执行文件完全包含它需要的所有内容
-
感谢您的评论。第二台计算机实际上甚至没有 Python 环境,因为我使用它来确保 exe 是真正独立的。不过,Python 的存在似乎并不是主要原因,因为我的一个朋友昨天在他的计算机上测试了可执行文件。那里没有 Python 环境,但他和我在开发计算机上遇到的问题一样。尽管如此,某些组件的存在或缺乏可能是一个很好的线索。
标签: python networking timeout twisted ogre