1

アプリケーションでtxnetを使用して、一部のサーバーが稼働しているかどうかを監視しています。Webインターフェイスがあるため、リアクターはpingリクエスト用のlistenICMP(txnetで提供されるリアクターです)とともに、WebサーバーのlistenTCPも備えています。私の質問は、twistd でデーモン化する方法についてです。Twisted.internet.application は API に従って提供します:

TCPServer、TCPClient、UNIXServer、UNIXClient、SSLServer、SSLClient、UDPServer、UDPClient、UNIXDatagramServer、UNIXDatagramClient、MulticastServer

私は自分のサービスを実装する必要があると思いますが、これを行うための良い例を見つけることができます.オンラインでの最良の説明はおそらくkrondoチュートリアルの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 が必要です。

4

1 に答える 1