【问题标题】:Twisted Matrix and telnet server implementationTwisted Matrix 和 telnet 服务器实现
【发布时间】:2011-02-21 07:43:09
【问题描述】:

我有一个项目,它本质上是一个游戏服务器,用户通过 telnet 连接和发送文本命令。

代码是 C 语言,非常陈旧且非模块化,有几个错误和缺失的功能。仅 main 函数是代码的一半。

我得出的结论是,使用 Twisted 用 Python 重写它实际上可以加快完成速度,此外还有其他好处。

所以,这里是问题: 我应该使用哪些包和模块?我在“protocols”包中看到了一个“telnet”模块。我还看到带有“ssh”和另一个“telnet”模块的“cronch”包。

我完全是 Python 新手。

【问题讨论】:

    标签: python twisted telnet


    【解决方案1】:

    听起来你在这里有两个独立的任务:

    • 将代码从 C 移植到 Python。
    • 重写整个程序以使用 Twisted。

    由于您是 Python 新手,在尝试使程序结构在 Twisted 中运行之前,我倾向于先做第一个 first。如果程序较旧,则在现代硬件上运行它可能不会出现任何性能问题。

    首先将 C 代码转换为 Python 将使您熟悉 Python,您需要开始移植到 Twisted。

    【讨论】:

      【解决方案2】:

      Greg 建议在尝试接受 Twisted 之前先尝试熟悉 Python,这或许是一个合理的建议。限制混淆的可能来源可以帮助您避免一些非常令人沮丧的情况。

      另一方面,我认识很多人将基于 Twisted 的项目作为第一次 Python 学习体验并取得了成功。所以这是可能的。你必须先做某事。不能保证你选择的东西而不是 Twisted 会更容易。 :)

      就 telnet 的细节而言,您想使用twisted.conch.telnet,而不是twisted.protocols.telnet。前者更新、测试更好、功能更多,并且有几个示例(不幸的是,除此之外没有很多文档)。

      The main telnet example 向您展示了使用twisted.conch.telnet 时可以定义的最有用的事件处理程序。不幸的是,它并没有真正解释他们做什么,也没有展示你如何谈判选择。如果您已经熟悉 telnet 协议本身(主要是它的选项协商部分),那么这对您来说应该是有意义的。如果您认为“telnet”只是在两台计算机之间传递人类可读/可写字节的一种方式,那么您之前可能没有遇到过选项协商,它可能没有多大意义。您可以忽略它,或者查看the telnet RFC 了解更多信息(不过它有点密集)。

      对于自己执行选项协商,您至少可以查看the API documentation 以获取您在上面链接示例中看到的self.transport 对象(这不是常规的 TCP 传输,因为您会发现在很多地方都使用Twisted,但是一个特殊的 telnet 派生的传输,它位于 TCP 之上,因此它有一些额外的功能。

      如果你只是想传递字节,那么你可以关注dataReceived 方法和self.transport.write。当您从对等方接收到字节时,将调用前者;后者您可以调用以向您的对等方发送字节。

      【讨论】:

      • 谢谢。我想我会试试这条路。
      猜你喜欢
      • 2016-05-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-10
      • 2012-10-27
      • 2011-04-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多