Twisted Matrix与telnet服务器实现
我有一个项目,基本上是一个游戏服务器,用户可以通过telnet连接并发送文本命令。
这个代码是用C语言写的,真的很老旧,而且结构不清晰,里面有很多bug和缺失的功能。光是主函数就占了代码的一半。
我得出的结论是,如果用Python重写这个项目,使用Twisted框架,可能会更快完成,而且还有其他好处。
所以,我想问的是:我应该使用哪些包和模块?我看到“protocols”包里面有一个“telnet”模块。还有一个“cronch”包,里面有“ssh”和另一个“telnet”模块。
我对Python完全是个新手。
2 个回答
听起来你有两个不同的任务:
- 把代码从C语言转换成Python。
- 重写整个程序,让它使用Twisted。
因为你刚接触Python,我建议你先做第一个任务,也就是先把C代码转换成Python,然后再尝试把程序结构改成Twisted。如果这个程序比较旧,用现代的硬件运行它一般不会有性能问题。
先把C代码转换成Python,可以让你熟悉Python的语法,这样你在转换到Twisted的时候会更得心应手。
Greg的建议是,在尝试使用Twisted之前,先熟悉一下Python,这个建议听起来挺合理的。减少可能让你困惑的来源,可能会帮助你避免一些非常让人沮丧的情况。
不过,我也知道很多人把基于Twisted的项目当作他们学习Python的第一步,并且都成功了。所以这是有可能的。而且你总得先做点什么。没有保证你选择的其他东西会更简单。:)
关于telnet的具体内容,你应该使用twisted.conch.telnet
,而不是twisted.protocols.telnet
。前者更新、更好测试、功能更全,并且有几个示例(不过遗憾的是,除了这些示例,文档不多)。
主要的telnet示例展示了如果你使用twisted.conch.telnet
,可以定义的最有用的事件处理器。不幸的是,它并没有详细解释这些处理器的作用,也没有演示如何进行选项协商。如果你已经熟悉telnet协议本身(主要是选项协商的部分),那么这些内容应该对你来说是有意义的。如果你把“telnet”仅仅看作是在两台计算机之间传递可读写的字节,那么你可能之前没有接触过选项协商,可能会觉得不太明白。你可以选择忽略它,或者查看telnet的RFC文档来了解更多(不过这份文档有点难懂)。
如果你想自己进行选项协商,至少可以看看API文档,这是你在上面链接的示例中看到的self.transport
对象(这不是Twisted中常见的普通TCP传输,而是一个特殊的基于telnet的传输,建立在TCP之上,所以它有一些额外的功能)。
不过,如果你只是想传递字节,那么可以专注于dataReceived
方法和self.transport.write
。前者会在你从对方接收到字节时被调用;后者是你可以用来发送字节给对方的方法。