Szenario: Es gibt einen Server A und einen Client B und es besteht eine Socket-Verbindung.
Was ich jetzt schreibe, ist Teil B auf der Clientseite, die Serverseite ist unkontrollierbar.
Es stellt sich heraus, dass B zuerst ein Paket sendet, darauf wartet, dass A den angegebenen Inhalt zurückgibt, und dann sendet B das nächste Paket
def do():
s.send(...)
yield 1
s.send(...)
yield 2
# 接收到数据后的回调
def callback():
global f
next(f)
f=do()
next(f)
Jetzt möchte ich ein Timeout und eine Blockierung implementieren. Nachdem B die Daten gesendet hat, blockiert es, bis A die Daten zurückgibt (oder löst einen Fehler aus, wenn es nicht innerhalb von 5 Sekunden eine Antwort von A erhält). Sagen Sie mir bitte, wie ich das erreichen kann.
用 Tornado 的话,写不了几行代码吧。
先作个简单的 Server ,以方便演示:
然后,来实现 Client ,基本逻辑是,超时就关闭连接,然后再重新建立连接: