<p>我发现当一个扭曲的端点(在本例中是<code>TCP4ClientEndpoint</code>)连接到另一个端点(这里是<code>TCP4ServerEndpoint</code>)时,由该连接创建的<code>Deferred</code>会立即被触发(即连接时自动调用<code>Protocol.connectionMade()</code>)。你知道吗</p>
<p>这是通过在<code>Deferred</code>需要被激发之前不建立连接来解决的(或者,我想我可以创建另一个<code>Deferred</code>来使用),如下所示:</p>
<pre><code>class OutpostBurrowNew(amp.AMP, Protocol):
protocol = OutpostGopher
#...
def rfidTest(self):
#print("Checking tag - Deferred called: %s" % str(self.defer.called))
print('Tag check')
(status,TagType) = MIFAREReader.MFRC522_Request(MIFAREReader.PICC_REQIDL)
if status == MIFAREReader.MI_OK:
# print "Card detected"
status,uid = self.verifyCard()
cardid = '-'.join([str(x) for x in uid])
print('Card detected: %s' % str(cardid))
#self.defer.callback()
self.connectEndpoint()
def main3():
''' main3() is for testing reactor usage of RFID-card reading '''
burrow = OutpostBurrowNew('client')
burrow.protocol = OutpostGopher
#burrow.connectEndpoint() # A deferred is created, set on burrow.defer
looper = LoopingCall(burrow.rfidTest)
loopdef = looper.start(1, now=False)
reactor.run()
</code></pre>
<p>结果如下:</p>
<pre><code>(env)pi@raspi ~/zenithproject/zenith $ sudo python indev/rfidread_remote.py
Tag check
Tag check
Card detected: 133-197-223-29-130
Gopher.connectionMade() called.
Tag check
Tag check
</code></pre>