How to start a twisted flask?

I want to be able to run multiple twisted proxies in different directories on the same port at the same time, and I decided that I could use a flask. so here is my code:

from flask import Flask
from twisted.internet import reactor
from twisted.web import proxy, server

app = Flask(__name__)
@app.route('/example')
def index():
    site = server.Site(proxy.ReverseProxyResource('www.example.com', 80, ''.encode("utf-8")))
    reactor.listenTCP(80, site)
    reactor.run()

app.run(port=80, host='My_IP')

But whenever I run this script, I get an internal server error, I assume that when it app.runis called on port 80, it reactor.runalso cannot listen on port 80. I am wondering if there is any work on this, or what I am doing wrong. Any help is much appreciated, thanks!

+4
source share
2 answers

klein . twisted. flask, , flask. :

from twisted.internet import reactor
from twisted.web import proxy, server
from klein import Klein

app = Klein()

@app.route('/example')
def home(request):
    site = server.Site(proxy.ReverseProxyResource('www.example.com', 80, ''.encode("utf-8")))
    reactor.listenTCP(80, site)

app.run('localhost', 8000)        # start the klein app on port 8000 and reactor event loop

+8

WSGIResource Twisted istead ReverseProxy.

UPDATE: , WSGIResource /my _flask ReverseProxy /

from flask import Flask
from twisted.internet import reactor
from twisted.web.proxy import ReverseProxyResource
from twisted.web.resource import Resource
from twisted.web.server import Site
from twisted.web.wsgi import WSGIResource

app = Flask(__name__)


@app.route('/example')
def index():
    return 'My Twisted Flask'

flask_site = WSGIResource(reactor, reactor.getThreadPool(), app)

root = Resource()
root.putChild('my_flask', flask_site)

site_example = ReverseProxyResource('www.example.com', 80, '/')
root.putChild('example', site_example)


reactor.listenTCP(8081, Site(root))
reactor.run()

, localhost: 8081/my_flask/example localhost: 8081/example

+6

All Articles