2016-05-03 12 views
1

Ich versuche, klein mit twisted zu laufen, damit ich verdrehte Skripte auf verschiedenen Pfaden ausführen kann (exp: example.com/example1, example.com/example2). Also habe ich ein einfaches Skript:Wie führe ich Klein mit Twisted?

from klein import run, route, Klein 
from twisted.internet import reactor 
from twisted.web import proxy, server 
from twisted.python import log 

@route('/example') 
def home(request): 
    site = server.Site(proxy.ReverseProxyResource('www.example.com', 80, b'')) 
    reactor.listenTCP(80, site) 
    reactor.run() 

run("My_IP_Address", 80) 

Aber immer, wenn ich dieses Skript ausführen bekomme ich einen Fehler: twisted.internet.error.CannotListenError: Couldn't listen on any:80: [Errno 98] Address already in use. Ich bin sehr neu für Klein, und ich bin nicht sicher, wie es funktioniert, Könnte mir jemand sagen, was es mache ich falsch? Vielen Dank!

Antwort

2

Diese Ausnahme, die Sie bekommen scheint ziemlich klar, es sagt:

Couldn't listen on any:80: [Errno 98] Address already in use. 

es passiert, wenn Portnummer zu verwenden sind versuchen, bereits von einigen anderen Diensten verwendet wird. Dieser andere Dienst kann entweder Twisted oder Twisted sein. Ich gehe davon aus, dass Sie sonst nichts auf Port 80 hören (zB nginx oder Apache oder ein anderer Webserver, beachten Sie, dass 80 der Standard-HTTP-Port ist, so dass viele Dienste dort zuhören können) und dass Ihr Problem dadurch verursacht wird, dass Sie zwei starten verdrehte Webdienste.

In Ihrem Fall versuchen Sie, zwei Dienste an einem Port zu hören.

run("My_IP_Address", 80) 

startet einen Dienst auf Port auf/example Route 80.

Nach dem Empfang Anfrage Hören Sie versuchen, einen anderen Dienst auf demselben Port zu starten:

site = server.Site(proxy.ReverseProxyResource('www.example.com', 80, b'')) 
reactor.listenTCP(80, site) 
reactor.run() 

dies nicht machen Logischer Sinn, Sie können nicht zwei Dienste auf demselben Port ausführen. Deshalb erhalten Sie diese Ausnahme. Auch dein Aufruf von reactor.run() ist sinnlos, run() importiert von klein startet schon Reaktor.

Wenn Sie wirklich einige Server nach einer Anfrage starten müssen (das scheint ein sehr ungewöhnlicher Anwendungsfall zu sein), starten Sie es auf einem anderen Port. Aber vielleicht should simply start with offizielle Dokumentation und Beispiele dort?