我正在尝试使用twisted运行klein,因此我可以在不同的路径上运行扭曲的脚本(exp:example.com/example1
,example.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很新,而且我不确定它是如何工作的,有人可以告诉我它是做错了吗?谢谢!
答案 0 :(得分:2)
你所得到的这个例外似乎相当清楚它说:
Couldn't listen on any:80: [Errno 98] Address already in use.
当您尝试使用的端口号已被其他一些服务使用时,会发生这种情况。这个其他服务可以是Twisted之外的其他服务或两个Twisted服务。我假设你没有其他任何东西在端口80上监听(例如nginx或apache或其他一些web服务器,注意80是默认的HTTP端口,所以很多服务都可以在那里监听)并且你的问题是由启动两个引起的扭曲的网络服务。
在您的情况下,您尝试在一个端口上启动两个服务。
run("My_IP_Address", 80)
启动一个服务侦听端口80.
在/ example路由上收到请求后,您尝试在同一端口上启动另一项服务:
site = server.Site(proxy.ReverseProxyResource('www.example.com', 80, b''))
reactor.listenTCP(80, site)
reactor.run()
这没有逻辑意义,你不能在同一个端口上运行两个服务。这就是你得到这个例外的原因。你对reactor.run()的调用也没用,从klein导入的run()已经启动了reactor。
如果确实需要在某个请求后启动某个服务器(这看起来非常不寻常的用例),请在另一个端口启动它。但也许你有should simply start with官方文档和例子吗?