Twisted + Django + 反向代理
我正在把twisted用作我网站的网络服务器。我在考虑反向代理的可能性。
现在我有以下代码连接到我的django反应器。我在使用comet,并且我意识到我必须使用80端口,所以我在研究反向代理的选项。在这个网站上,我找到了以下示例:
# Django setup
sys.path.append("shoout_web")
os.environ['DJANGO_SETTINGS_MODULE'] = 'shoout_web.settings'
def wrapper_WSGIRootWrapper():
# Build the wrapper first
generic = WSGIHandler()
def HandlerWrapper(environ, start_response):
environ['engine'] = engine
return generic(environ, start_response)
# Thread and Allowing Ctrl-C to get you out cleanly:
pool = threadpool.ThreadPool()
pool.start()
reactor.addSystemEventTrigger('after', 'shutdown', pool.stop)
return wsgi.WSGIResource(reactor, pool, HandlerWrapper)
WSGIRoot = wrapper_WSGIRootWrapper()
# Reverse Proxy
class Simple(Resource):
isLeaf = False
def getChild(self, name, request):
if name == "orbited":
print "orbited"
return proxy.ReverseProxyResource('localhost', 12345, "/"+name)
else:
return WSGIRoot.getChildWithDefault(name, request)
# Attaching proxy + django
log_dir = './.log'
if not os.path.exists(log_dir):
os.makedirs(log_dir)
reactor.listenTCP(DJANGO_PORT, server.Site(Simple(), logPath=os.path.join(log_dir, '.django.log')))
我的问题是,我不太清楚在第二段代码的else部分该填什么。我查看了twisted-src上的text_proxy,但没有找到实质性的示例。有人能帮忙吗?
1 个回答
1
我不太明白你为什么想用反向代理。我觉得你可能是用错了工具。
反向代理的好处在于,它可以让像nginx这样轻量级的服务器处理成千上万的HTTP保持连接,而且占用的内存非常少。反向代理和真正的网络服务器(在你的情况下是twisted)之间的连接相对较少,而且持续时间短,所以你可以处理更高的负载。不过,如果你使用的是长时间保持的连接(比如comet连接),那就没什么好处了,因为你需要在两个服务器之间保持连接一直打开。
你似乎只是想把12345端口上的服务器通过80端口提供服务。这并不是反向代理的用途。为什么不直接绑定80端口呢?