Как демонизировать пользовательский реактор (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 обеспечивает, в том числе демонизации. Вот пример.

Другие вопросы по тегам