如何使用twists守护自定义反应器(txnet)

时间:2014-03-20 17:47:24

标签: networking twisted python-daemon twistd

我在应用程序中使用txnet监视某些服务器是否启动,它有一个Web界面,因此反应堆连同listenICMP for ping请求(是txnet中提供的反应堆)也是listenTCP用于Web服务器。我的问题是关于如何使用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可能在这里工作,但这是一个简化版本,我真的需要听IC。

1 个答案:

答案 0 :(得分:1)

通过编写twistd 插件,您可以使用twistd提供的所有功能,包括守护进程。这是一个example