Twisted + Django + 反向代理

0 投票
1 回答
1341 浏览
提问于 2025-04-16 05:35

我正在把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端口呢?

撰写回答