gpt4 book ai didi

python - 如何在 Twisted 中将 TCP Keepalive 与端点一起使用?

转载 作者:可可西里 更新时间:2023-11-01 02:32:44 25 4
gpt4 key购买 nike

Twisted 确实支持 TCP Keepalive .但是我找不到在端点(客户端和服务器)上设置它们的简单方法。

当前最佳做法是什么?

最佳答案

我看不出有什么方法可以通过 API 从端点干净地实现这一点。但是请查看 twisted.internet.endpoints._WrappingProtocol 的来源- 您可以将您的端点设置为使用 _WrappingFactory*,它会在建立连接时回调延迟。此时协议(protocol)上设置了传输,您可以调用 setTcpKeepAlive

鉴于类名中的下划线,我会说这些是为了在内部使用,我不会依赖它们的接口(interface)在版本之间保持一致。您应该将它们用作指南。

或者,只需在您的协议(protocol)的 connectionMade 中调用 self.transport.setTcpKeepAlive 并处理不支持的情况(即协议(protocol)用于另一个传输的情况) ).

#!/usr/bin/python
# based on example at http://twistedmatrix.com/pipermail/twisted-python/2008-June/017836.html
from twisted.internet import protocol
from twisted.internet import reactor

class EchoProtocol(protocol.Protocol):
def connectionMade(self):
print "Client Connected Detected!"
### enable keepalive if supported
try:
self.transport.setTcpKeepAlive(1)
except AttributeError: pass

def connectionLost(self, reason):
print "Client Connection Lost!"

def dataReceived(self, data):
self.transport.write(data)


factory = protocol.Factory()
factory.protocol = EchoProtocol
reactor.listenTCP(8000, factory)
reactor.run()

对于这个简单的示例,我认为这提供了一个相当干净的解决方案,但是在某些情况下可能需要额外的包装器代码。

* 请注意,_WrappingFactoryClientFactory 的子类,可能不适用于服务器。

关于python - 如何在 Twisted 中将 TCP Keepalive 与端点一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20792636/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com