当前位置:  开发笔记 > 编程语言 > 正文

是否可以在Twisted中设置套接字超时?

如何解决《是否可以在Twisted中设置套接字超时?》经验,为你挑选了2个好方法。

我意识到我可能只是愚蠢而且缺少一些重要的东西,但我无法弄清楚如何使用reactor.listenUDP来指定扭曲的超时.我的目标是能够指定超时,并且在所述时间之后,如果DatagramProtocol.datagramReceived尚未执行,请让它执行回调或我可以用来调用reactor.stop()的东西.任何帮助或建议表示赞赏.谢谢



1> daf..:

我认为reactor.callLater会更好LoopingCall.像这样的东西:

class Protocol(DatagramProtocol):
    def __init__(self, timeout):
        self.timeout = timeout

    def datagramReceived(self, datagram):
        self.timeout.cancel()
        # ...

timeout = reactor.callLater(5, timedOut)
reactor.listenUDP(Protocol(timeout))



2> Aaron Maenpa..:

由于Twisted是事件驱动的,因此您本身不需要超时.您只需在接收数据报时设置状态变量(如datagramRecieved)并注册检查状态变量的循环调用,如果合适则停止反应器然后清除状态变量:

from twisted.internet import task
from twisted.internet import reactor

datagramRecieved = False
timeout = 1.0 # One second

# UDP code here

def testTimeout():
    global datagramRecieved
    if not datagramRecieved:
        reactor.stop()
    datagramRecieved = False


l = task.LoopingCall(testTimeout)
l.start(timeout) # call every second

# l.stop() will stop the looping calls
reactor.run()

推荐阅读
女女的家_747
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有