2009-09-02 26 views
6

Estoy tratando de usar Twisted en un tipo de programa spidering que gestiona múltiples conexiones de clientes. Me gustaría mantener un grupo de aproximadamente 5 clientes trabajando al mismo tiempo. La funcionalidad de cada cliente es conectarse a un servidor IRC específico que obtiene de una lista, ingresar un canal específico y luego guardar la lista de usuarios en ese canal en una base de datos.Administración de múltiples conexiones de cliente trenzado

El problema que estoy teniendo es más arquitectónico que cualquier otra cosa. Soy bastante nuevo en Twisted y no sé qué opciones están disponibles para administrar múltiples clientes. Supongo que la manera más fácil es simplemente hacer que cada instancia de ClientCreator muera una vez que haya completado su trabajo y tener un ciclo central que pueda verificar si hay espacio para agregar un nuevo cliente. Creo que este no es un problema particularmente inusual, así que espero obtener información de las experiencias de otras personas.

Respuesta

4

La mejor opción es realmente solo hacer lo obvio aquí. No tiene un bucle, o una llamada temporizada repetitiva; solo tiene controladores que hacen lo correcto.

Mantenga un objeto central de administración de conexión y haga que los métodos de manejo de eventos le den la información que necesita para seguir. Cuando comience, realice 5 conexiones salientes. Mantenga un registro de cuántos están en progreso, mantenga una lista con ellos en él. Cuando una conexión tiene éxito (en connectionMade) actualice la lista para recordar el nuevo estado de la conexión. Cuando se completa una conexión (en connectionLost), infórmale al administrador de conexión; su respuesta debería ser eliminar esa conexión y hacer una nueva conexión en otro lugar. En el medio, debería ser bastante obvio cómo despedir una solicitud de los nombres que necesita y meterlos en una base de datos (esperando a que se complete la base de datos antes de soltar su conexión de IRC, esperando que llegue el Deferred). de regreso desde adbapi).

3

Como cada uno de sus clientes tiene que actualizar una base de datos, por instinto creo que me llevan a cuestas de la connection pool - veo here para más (todo el documento se recomienda para algunos patrones de diseño importantes que a menudo surgen cuando se utiliza en espiral).

-1

No sé si está obligado a utilizar Twisted, de lo contrario, puede intentar Gevent.

Cuestiones relacionadas