我该如何让克莱恩和扭曲



我正在尝试使用twisted运行klein,这样我就可以在不同的路径上运行twisted脚本(exp:example.com/example1example.com/example2)。所以我做了一个简单的脚本:

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.我对Klein很陌生,我不确定它是如何工作的,有人能告诉我我做错了什么吗?谢谢

您得到的这个异常似乎很清楚,它说:

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

当您尝试使用的端口号已经被其他一些服务使用时,就会发生这种情况。这个其他服务可以是Twisted之外的其他服务,也可以是两个Twisted服务。我假设您在端口80上没有任何其他侦听器(例如nginx或apache或其他web服务器,请注意,80是默认的HTTP端口,因此许多服务都可以在那里侦听),并且您的问题是由启动两个扭曲的web服务引起的。

在您的情况下,您正试图在一个端口上启动两个侦听服务。

run("My_IP_Address", 80)

启动一个在端口80上侦听的服务。

在/示例路由上收到请求后,您正试图在同一端口上启动另一项服务:

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

这在逻辑上没有意义,不能在同一个端口上运行两个服务。这就是为什么会出现这种异常。此外,您对reactor.run()的调用是无用的,从klein导入的run()已经启动了reactor。

如果你真的需要在某个请求后启动某个服务器(这似乎是一个非常不寻常的用例),请在另一个端口上启动它。但也许你应该简单地从那里的官方文档和示例开始?

最新更新