アプリケーションで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 が必要です。