Как демонизировать пользовательский реактор (txnet) с помощью twistd
Я использую txnet в приложении для мониторинга работоспособности некоторых серверов, у него есть веб-интерфейс, поэтому реактор вместе с listenICMP для запросов ping (это реактор, предоставляемый в txnet) также listenTCP для веб-сервера. Мой вопрос о том, как демонизировать с помощью twistd. Twisted.internet.application предоставляют в соответствии с API:
TCPServer, TCPClient, UNIXServer, UNIXClient, SSLServer, SSLClient, UDPServer, UDPClient, UNIXDatagramServer, UNIXDatagramClient, MulticastServer
Я предполагаю, что мне нужно реализовать свой собственный сервис, но я могу найти хороший пример этого, лучшее объяснение в Интернете, вероятно, учебник по демонологии krondo, но в нем нет ссылок на изменение реактора. Подводя итог: Каков наилучший выбор для того, чтобы демонизировать что-то подобное?:
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, вероятно, делает работу здесь, но это упрощенная версия, мне действительно нужно слушать ICMP.
1 ответ
Написав twistd
плагин вы можете использовать все функции twistd
обеспечивает, в том числе демонизации. Вот пример.