2014-01-19 53 views
0

的端口我做了一个简单的代理服务器使用双绞线更改重定向扭曲代理

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) 

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

这是可能的操作过程中更改代理目的地是哪里?

回答

1

reactor.listenTCP返回一个对象,它提供IListeningPort具有stopListening方法,其停止在该端口上的服务器(注意,它返回一个Deferred和服务器不实际停止直到Deferred火灾)。

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

+0

此解决方案主要工作,所有新的连接现在被发送到新的端口。但是,建立的连接会继续将数据发送到已停止的代理端口。任何想法,为什么?我期望(并希望)现有连接在端口改变时被重定向。有任何想法吗? –

+0

使用'stopListening'和'listenTCP'做事情只会影响侦听端口。聆听端口是一个独特的事物。当连接尝试到达侦听端口时,会创建一个新的服务器端连接对象来表示它(通常是传输和协议)。然后传输和协议完全独立于监听端口。港口发生的任何事情都不会对这些连接产生影响。如果你想要改变这些连接的行为,你就必须改变处理它们的协议。 –