Twisted: conexión de reconexión de ClientFactory a diferentes servidores

Tengo un ReconnectingClientFactory retorcido y puedo conectarme con éxito a la pareja de ip y puerto dada con esta fábrica. Y funciona bien.

reactor.connectTCP (ip, puerto, myHandsomeReconnectingClientFactory)

En esta situación, cuando el servidor se ha ido, myHandsomeReconnectingClientFactory intenta conectar la misma ip y el puerto (como se esperaba).

Mi objective es que cuando el servidor que sirve en una determinada ip y puerto se haya ido, se conecte a un servidor de respaldo (que tenga una ip y un puerto diferentes).

Cualquier idea / comentario sobre cómo lograr este objective será apreciado.

Id bash algo como:

class myHandsomeReconnectingClientFactory(protocol.ReconnectingClientFactory): def __init_(self, hosts): # hosts should be a list of tuples (host, port) self._hosts = hosts def clientConnectionFailed(self, connector, reason): if self.continueTrying: self._try_next_host(connector) def clientConnectionLost(self, connector, unused_reason): if self.continueTrying: self._try_next_host(connector) def _try_next_host(self, connector): # round robing of servers to_try = self._hosts.pop(0) self._hosts.append(to_try) connector.host, connector.port = to_try self.connector = connector self.retry() 

No lo he probado, pero al menos debería darte un buen punto de partida. Buena uck

ReconnectingClientFactory no tiene esta capacidad. Puede construir su propia fábrica que implemente este tipo de lógica de reconexión, principalmente conectando el método de fábrica clientConnectionFailed . Cuando se llama a esto y le parece que el motivo justifica la conmutación de servidores (por ejemplo, twisted.internet.error.ConnectionRefused ), elija la siguiente dirección en su lista y use el método reactor.connectXYZ adecuado para intentar conectarse a ella.

También puede intentar construir esto como un punto final (que es el API de configuración de la conexión de alto nivel más reciente preferido por algunos), pero el manejo de la reconexión con los puntos finales todavía no es un tema bien documentado.