2016-05-03 3 views
1

Я пытаюсь запустить klein с искаженным, поэтому я могу запускать скрученные скрипты на разных дорожках (exp: example.com/example1, example.com/example2). Так что я сделал простой скрипт:Как запустить Klein с витой?

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) 

Но всякий раз, когда я запускаю этот сценарий, я получаю сообщение об ошибке: twisted.internet.error.CannotListenError: Couldn't listen on any:80: [Errno 98] Address already in use. Я очень новый Клейн, и я не знаю, как это работает, может кто-нибудь сказать мне, что это Я делаю неправильно? благодаря!

ответ

2

Это исключение, которое вы получаете, кажется, достаточно ясно говорится:

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

это происходит, когда номер порта, который вы пытаетесь использовать, уже используется некоторыми другими службами. Эта другая услуга может быть либо чем-то иным, чем витой или двумя витыми сервисами. Я предполагаю, что у вас нет другого прослушивания на порту 80 (например, nginx или apache или какой-либо другой веб-сервер, обратите внимание, что 80 - это HTTP-порт по умолчанию, поэтому многие службы могут там прослушиваться), и что ваша проблема вызвана запуском двух скрученные веб-сервисы.

В вашем случае вы пытаетесь запустить две службы, прослушивающие один порт.

run("My_IP_Address", 80) 

начинает один сервис на порту 80.

После получения запроса на/например, маршрут вы пытаетесь запустить другую службу на этом же порту:

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

это не делает логический смысл, у вас не может быть двух служб, работающих на одном и том же порту. Вот почему вы получаете это исключение. Также ваш призыв к реактору.run() бесполезен, run(), импортированный из klein, уже запускает реактор.

Если вам действительно нужно запустить какой-либо сервер после некоторого запроса (это кажется очень необычным вариантом использования), запустите его на другом порту. Но, может быть, у вас should simply start with официальная документация и примеры там?