Twisted Matrix和telnet服务器实现

时间:2010-05-19 10:33:18

标签: python twisted telnet

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

代码在C中,并且非常旧且非模块化,并且存在多个错误和缺少的功能。仅主要功能就是代码的一半。

我得出的结论是,使用Twisted在Python中重写它实际上可以带来更快的完成,除了其他好处。

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

我是Python的完全新手。

2 个答案:

答案 0 :(得分:5)

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。当您从对等方接收字节时,将调用前者;后者你可以调用发送字节给你的同伴。

答案 1 :(得分:1)

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

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

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

首先将C代码转换为Python将使您熟悉需要从端口启动到Twisted的Python。