我试图修补Twisted,看看它到底是什么。所以我买了Jessica McKellar& Sons出版的第2版“Twisted”一书。 Abe Fettig,下载并安装了Python,Twisted和zope.interface,并尝试输入并运行第12页的第一个示例:
from twisted.internet import reactor, protocol
class EchoClient(protocol.Protocol):
def connectionMade(self):
self.transport.write("Hello, Stupid!")
def dataReceived(self, data):
print "Server said: ", data
self.transport.loseConnection()
class EchoFactory(protocol.ClientFactory):
def BuildProtocol(self, addr):
return EchoClient()
def clientConnectionFailed(self, connector, reason):
print "Connection Failed."
reactor.stop()
def clientConnectionLost(self, connector, reason):
print "Connection lost."
reactor.stop()
reactor.connectTCP("localhost", 8000, EchoFactory())
reactor.run()
也有服务器部分。我运行了服务器程序,然后在另一个cmdline窗口中运行了客户端程序(上面)。它产生了:
"Unhandled Error
Traceback.. (several lines - see attached screen-capture (oops - this won't let me attach images!)
文件“C:\ Python27 \ lib \ site-package \ twisted \ python \ context.py”,第81行,在callWithContext中 --- --- 文件“C:\ Python27 \ lib \ site-packages \ twisted \ internet \ selectreactor.py”,第151行,在_doReadOrWrite中为什么= getattr(selectable,method)() doConnect self._connectDone()中的文件“C:\ Python27 \ lib \ site-packages \ twisted \ internet \ tcp.py”,第593行 .. exceptions.TypeError:'NoneType'对象不可调用。 连接失败。
如果我是Python专家,我可能会更清楚这个问题,但我对它很陌生 - 来自C#,F#,C ++背景。
您认为可能导致此问题 - 还有其他人遇到此问题吗?令人沮丧的是 - 如果我甚至无法获得第一个完全无关紧要的例子,我不能说这是一项简单的技术!
我使用的是Windows 8 x64,Python 2.7.5,Twisted 13.0.0(安装程序是Twisted-13.0.0.win-amd64-py2.7.msi),我添加了我的python(C :\ Python27)和脚本到PATH env变量。
答案 0 :(得分:2)
我在这里开枪,但我认为问题在于一个小错字 - 而不是BuildProtocol
,它应该是buildProtocol
。当EchoFactory
实例尝试返回新协议实例时会出现错误 - 它返回None
而不是EchoClient
实例,后来这个None
很麻烦。