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 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 可能在这里工作,但这是一个简化版本,我真的需要listenICMP。

4

1 回答 1

1

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

于 2014-03-20T18:32:55.193 回答