【问题标题】:How do I run Klein with twisted?我如何用twisted运行Klein?
【发布时间】:2016-08-29 01:45:40
【问题描述】:

我正在尝试用 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 很陌生,我不确定它是如何工作的,谁能告诉我我做错了什么?谢谢!

【问题讨论】:

    标签: python python-3.x proxy twisted klein-mvc


    【解决方案1】:

    你得到的这个例外似乎很清楚,它说:

    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() 已经启动了反应器。

    如果您确实需要在某个请求后启动某个服务器(这似乎是非常不寻常的用例),请在不同的端口上启动它。但也许你有should simply start with 官方文档和示例?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-12-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-26
      • 1970-01-01
      相关资源
      最近更新 更多