我在应用程序中使用 txnet 来监视某些服务器是否已启动,它具有 Web 界面,因此反应器以及用于 ping 请求的 listenICMP(是 txnet 中提供的反应器)也用于 Web 服务器的 listenTCP。我的问题是关于如何使用twistd 进行守护进程。Twisted.internet.application 根据api提供:
TCPServer, TCPClient, UNIXServer, UNIXClient, SSLServer, SSLClient, UDPServer, UDPClient, UNIXDatagramServer, UNIXDatagramClient, MulticastServer
我猜我必须实现自己的服务,但我可以找到一个很好的例子,最好的在线解释可能是krondo tutorial daemonology ,但它没有关于更改反应器的参考。总结:为了守护这样的东西,最好的选择是什么?:
import json
from txnet.reactor import reactor
from twisted.web import server, resource
from twisted.internet.protocol import DatagramProtocol
result = {}
class PingProtocol(DatagramProtocol):
ICMP_ECHOREPLY = 0
def datagramReceived(self, datagram, address):
ip, port = address
result[ip] = True
class WebServer(resource.Resource):
def __init__(self):
resource.Resource.__init__(self)
self.putChild('', self)
def render_GET(self, request):
str = json.dumps(result)
result.clear()
return str
wserver = WebServer()
reactor.listenTCP(8081, server.Site(wserver))
reactor.listenICMP(0, PingProtocol())
reactor.run()
我知道listenUDP 可能在这里工作,但这是一个简化版本,我真的需要listenICMP。