2014-01-19 5 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 пожаров).

Вы можете использовать этот метод stopListening перед вторым вызовом listenTCP, чтобы освободить порт сервера для использования новым, переконфигурированным сервером.

+0

Это решение в основном работает, все новые соединения теперь отправляются на новый порт. Однако установленные соединения продолжают отправлять данные на порт прокси, который был остановлен. Любая идея, почему это так? Я ожидал (и хотел), чтобы существующие соединения были перенаправлены при изменении порта. Есть идеи? –

+0

Выполнение действий с помощью 'stopListening' и' listenTCP' влияет только на порт прослушивания. Порт прослушивания - это отличная вещь. При попытке подключения к порту прослушивания создается новый объект соединения на стороне сервера (обычно это транспорт и протокол). Затем транспорт и протокол полностью отделены от порта прослушивания. Ничто, что происходит с портом, не повлияет на эти соединения. Если вы хотите изменить поведение этих подключений, вам придется что-то изменить в протоколе, обрабатывающем их. –

Смежные вопросы