2009-01-14 28 views
10

Me preguntaba qué bibliotecas de red existen para Python para construir un servidor TCP/IP. Sé que Twisted podría pasar por mi mente, pero la documentación parece escasa, descuidada y dispersa para mí.Buenas bibliotecas de red Python para construir un servidor TCP?

Además, ¿usar Twisted incluso tendría un beneficio sobre rodar mi propio servidor con select.select()?

Respuesta

10

Debo aceptar que la documentación es un tanto escueta pero el tutorial lo pone en funcionamiento rápidamente.

http://twistedmatrix.com/projects/core/documentation/howto/tutorial/index.html

El paradigma de programación basada en eventos de Twisted y es defereds podrían ser un poco raro al principio (era para mí) pero vale la pena la curva de aprendizaje.

Te pondrás en funcionamiento haciendo cosas mucho más complejas más rápidamente que si escribieras tu propio framework y también significaría una cosa menos para la búsqueda de errores, ya que Twisted es una producción probada.

Realmente no conozco otro framework que pueda ofrecer tanto como Twisted can, por lo que mi voto definitivamente iría por Twisted, incluso si los documentos no son para los débiles de corazón.

Estoy de acuerdo con Greg en que SocketServer es un buen término medio, pero dependiendo del público objetivo de su aplicación y el diseño de la misma, es posible que tenga algunas cosas interesantes en Twisted (el PerspectiveBroker es muy útil para mind - http://twistedmatrix.com/projects/core/documentation/howto/pb-intro.html)

6

La biblioteca estándar incluye SocketServer y módulos relacionados que pueden ser suficientes para sus necesidades. Este es un buen término medio entre un marco complejo como Twisted, y girando tu propio loop select().

+0

Parece que necesita utilizar subprocesos para admitir el manejo de múltiples clientes. ¿No sería la sobrecarga de la creación/destrucción de todos esos hilos lo que lo hace inútil? ¿No seleccionaría() sería mejor entonces? – ryeguy

+0

@ryeguy: No es necesario utilizar hilos en absoluto con SocketServer, de hecho, la documentación menciona esto en el último párrafo de la sección "Notas de creación del servidor". –

+0

+1: Ya está en la biblioteca, ya funciona. –

1

Si no quieres utilizar Twisted, es posible que desees consultar SocketServer.ThreadingTCPServer. Es bastante fácil de usar, y es bueno suficiente para muchos propósitos.

Para la mayoría de las situaciones, Twisted es probablemente va a ser más rápido y más fiable, así que me la documentación de estómago si se puede :)

1

Simplemente añadiendo una respuesta a reiterar otros carteles - es Valdrá la pena usar Twisted. No hay razón para escribir otro servidor TCP que termine funcionando no tan bien como uno que use retorcido. La única razón sería si escribir el suyo es mucho más rápido, en cuanto al desarrollador, pero si solo muerde la bala y aprende a retorcerse ahora, sus proyectos futuros se beneficiarán enormemente. Y, como han dicho otros, podrá hacer cosas mucho más complejas si usa retorcidas desde el principio.

1

he intentado 3 enfoques:

  • escribir mi propio bucle select() framework (prácticamente muerto, no necesariamente lo recomiendo.)
  • Uso SocketServer
  • Twisted

Utilicé el SocketServer para un servicio web interno con bastante poco tráfico. Se usa para un servicio de registro interno de bastante tráfico. Ambos funcionan perfectamente y parecen bastante confiables para el uso en producción. Para todo lo que necesita ser un rendimiento, creo que Twisted es mucho mejor, pero es mucho más trabajo entender la arquitectura.

Cuestiones relacionadas