有
class CnxAwareSite(server.Site):
def __init__(self, *args, **kwargs):
server.Site.__init__(self, *args, **kwargs)
self.cnx_cnt = 0
def buildProtocol(self, addr):
channel = server.Site.buildProtocol(self, addr)
def cntCnxMade(f):
self.cnx_cnt += 1
print 'new conn', self.cnx_cnt
return f
channel.connectionMade = cntCnxMade(channel.connectionMade)
def cntCnxLost(f):
def post_wrap(result):
self.cnx_cnt -= 1
return result
return lambda *args, **kwargs: post_wrap(f(*args, **kwargs))
channel.connectionLost = cntCnxLost(channel.connectionLost)
return channel
...
site = CnxAwareSite(root)
site.port = reactor.listenTCP(PORT, site)
并安装了触发器,对 site.cnx_cnt 延迟链接到 site.port.stopListening() 执行异步循环检查
reactor.addSystemEventTrigger('before', 'shutdown', shutdown, site)
在停止反应堆之前确保服务的“干净关闭”是正确的方法吗?
使用 twistd 对我来说不是一个选择......(叹气)