Pregunta

Estoy tratando de transporte de datos entre el servidor y el cliente implementado con trenzado.Hasta donde yo sé, el uso de auto.de transporte.escribir([datos]) sólo funcionará si los datos es una cadena.¿Hay alguna otra manera puedo enviar un objeto de otro tipo?Gracias!

¿Fue útil?

Solución

Sockets llevar bytes.Ese es el único tipo de cosa que llevan.Cualquiera de los dos extremos de una conexión TCP sólo puede transmitir bytes para cada uno de los otros.

Bytes no son las más útiles estructura de datos para cada forma de comunicación.En la parte superior de este byte de transporte, inventamos los esquemas de formato y de la interpretación de bytes.Estos son los protocolos.

Trenzado representa protocolos como clases, almsot siempre subclases de twisted.internet.protocol.Protocol, que implementar un esquema particular.

Estas clases tienen métodos para activar algo que no es pura bytes en algo que es pura bytes.Por ejemplo, twisted.protocols.basic.NetstringReceiver es una implementación de la netstring protocolo.Resulta que un determinado número de bytes en bytes que representan tanto el número de bytes de los bytes de sí mismos.Este es un lugar sutil protocolo, ya que no instantáneamente obvio que el número de bytes de información que necesita ser transmitido así.

Estas clases también interpretar bytes recibidos desde la red, en su dataReceived método, según el protocolo de implementar, y gire a la información resultante a algo más estructurado. NetstringReceiver utiliza la información de longitud para que acepte exactamente el número de bytes de la red y, a continuación, entregar a su stringReceived el retorno como una sola Python str ejemplo.

Otros protocolos de hacer más de lo que NetstringReceiver.Por ejemplo, twisted.protocols.ftp incluye una implementación del protocolo FTP.FTP es un protocolo orientado hacia pasar las listas de archivos y archivos a través de un socket (o varias tomas, en realidad). twisted.mail.pop3 implementa POP3, protocolo de transferencia de correo electrónico a través de sockets.

Hay montones y montones de diferentes protocolos, porque hay un montón y un montón de cosas diferentes que usted puede ser que desee hacer.Dependiendo exactamente lo que estamos tratando de hacer, probablemente hay diferentes maneras de convertir a y desde bytes para hacer las cosas más fácil o más rápido o más robusto (y así sucesivamente).Así que no hay ningún protocolo que es ideal para el caso general.Que incluye el caso de "el envío de un objeto", ya que los objetos pueden tomar muchas formas diferentes, y puede haber diferentes razones por las que desea enviar, y muchas maneras diferentes que usted puede querer hacer las cosas como la mutación de un objeto que previamente había enviado, y así sucesivamente.

Usted probablemente querrá pasar un poco de tiempo a pensar acerca de qué tipo de comunicación que se necesita.Esto debe sugerir ciertas cosas sobre el protocolo que usted seleccione para hacer la comunicación.

Por ejemplo, si usted quiere ser capaz de llamar a los métodos de los objetos de Python que existen en el otro lado de la conexión, a continuación, Trenzado De Propagación podría ser interesante.

Si quieres algo lenguaje de la cruz en su lugar, y sólo necesitan para transmitir los tipos simples, como enteros, cadenas, listas y, a continuación, XML-RPC (Trenzado De Cómo-A) podría ser un mejor ajuste.

Si usted necesita un protocolo que más espacio eficiente de XML-RPC, y compatible con la serialización de los más complicados tipos, APLICACIONES de puede ser más apropiado.

Y la lista continúa.:)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top