【问题标题】:Change redirect port of twisted proxy更改扭曲代理的重定向端口
【发布时间】:2014-01-19 18:29:41
【问题描述】:

我有一个使用 twisted 制作的简单代理服务器

destination = portforward.ProxyFactory(dest_host, dest_port)
reactor.listenTCP(listen_port, destination)
reactor.run()

我想在某些情况下更改 dest_port 而无需重新启动服务器。

我试过了:

new_dest = portforward.ProxyFactory(dest_host, new_dest_port)
reactor.listenTCP(listen_port, new_dest)

当然,这会产生地址已在使用中的异常。

这是否可以在运行期间更改代理目的地?

【问题讨论】:

    标签: python proxy twisted


    【解决方案1】:

    reactor.listenTCP 返回一个提供 IListeningPort 的对象,该对象有一个 stopListening 方法,可以停止该端口上的服务器(请注意,它返回一个 Deferred 并且服务器实际上直到 Deferred 才停止火灾)。

    您可以在第二次调用listenTCP 之前使用此stopListening 方法来释放服务器端口以供重新配置的新服务器使用。

    【讨论】:

    • 这个解决方案大部分都有效,所有新连接现在都发送到新端口。但是,已建立的连接会继续将数据发送到已停止的代理端口。知道为什么吗?我希望(并希望)在更改端口时重定向现有连接。有什么想法吗?
    • stopListeninglistenTCP做事只对监听端口有影响。监听端口是一个独特的东西。当连接尝试到达侦听端口时,将创建一个新的服务器端连接对象来表示它(通常是传输和协议)。然后传输和协议与侦听端口完全分离。端口上发生的任何事情都不会影响这些连接。如果您希望这些连接的行为发生变化,则必须对处理它们的协议进行一些更改。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-08
    • 1970-01-01
    • 2016-04-16
    • 1970-01-01
    • 2013-03-04
    • 2012-03-16
    • 1970-01-01
    相关资源
    最近更新 更多