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 ,基本逻辑是,超时就关闭连接,然后再重新建立连接: