Pregunta

Estoy trabajando en un programa cliente-servidor por primera vez, y me siento lamentablemente inadecuado en dónde comenzar para lo que estoy haciendo.

Voy a usar Google Protocol Buffers para transferir datos binarios entre mi cliente y mi servidor. Voy a utilizar la variante de Python. La idea básica, según entiendo, es que el cliente va a serializar los datos, enviarlo al servidor, que a su vez deserializar los datos.

El problema es, en realidad no estoy seguro de por dónde empezar para el envío de datos binarios al servidor. Tenía la esperanza de que sería algo "simple" como una petición HTTP, pero he estado buscando en torno a Google de formas de transferencia de datos binarios y perderse en la gran multitud de tutoriales, guías y documentación. Ni siquiera puedo decir si estoy ladrando al árbol equivocado mediante la investigación de las transferencias HTTP (que estaba esperando para usarlo, por lo que pudiera llamar a un nivel superior a HTTPS si es necesaria la seguridad). Realmente no quiero tener que ir al nivel de la programación del zócalo, sin embargo - me gustaría utilizar las bibliotecas disponibles antes de volver a eso. (También me prefiero bibliotecas estándar de Python, aunque si hay la biblioteca 3 ª parte perfecta viviré.)

Por lo tanto, si alguien tiene un buen punto de partida (o quiere explicar un poco a sí mismos) de cómo una buena manera de transferir datos binarios a través de Python, estaría agradecido. El servidor que estoy corriendo actualmente se está ejecutando Apache con mod_python, por cierto.

¿Fue útil?

Solución

Cada vez que se va a mover los datos binarios de un sistema a otro hay un par de cosas a tener en cuenta.

Las diferentes máquinas almacenar la misma información de manera diferente. Esto tiene implicaciones tanto en la memoria y en la red. Más información aquí ( http://en.wikipedia.org/wiki/Endianness )

Debido a que usted está utilizando Python se puede cortar un poco de holgura aquí (suponiendo que el cliente y el servidor será por tanto en python) y sólo tiene que utilizar cPickle para serializar los datos. Si realmente quiere binaria, vas a tener que sentirse cómodo con módulo de estructura de pitón ( http: //docs.python.org/library/struct.html ). Y aprender cómo empaquetar / desempaquetar sus datos.

Me gustaría empezar a cabo con los servidores de la línea de protocolo sencillas hasta llegar más allá de la dificultad de la comunicación en red. Si nunca lo has hecho antes de que pueda prestarse a confusión muy rápido. Cómo emitir comandos, cómo pasar datos, la forma de re-sincronización de errores, etc ...

Si ya conoce los conceptos básicos de diseño del protocolo cliente / servidor, entonces la práctica embalaje y desembalaje estructuras binarias en su primer disco. También me refiero a los RFC de HTTP y FTP para casos como éste.

------- EDITAR BASADO EN COMENTARIO -------- Normalmente este tipo de cosas se hace enviando al servidor una "cabecera" que contiene una suma de comprobación del archivo, así como el tamaño del archivo en bytes. Tenga en cuenta que no me refiero a una cabecera HTTP, puede personalizar como quieras. La cadena de eventos tiene que ser algo como esto ...

CLIENT: "UPLOAD acbd18db4cc2f85cedef654fccc4a4d8 253521"
SERVER: "OK"
(server splits the text line to get the command, checksum, and size)
CLIENT: "010101101010101100010101010etc..." (up to 253521 bytes)
(server reasembles all received data into a file, then checksums it to make sure it matches the original)
SERVER: "YEP GOT IT"
CLIENT: "COOL CYA"

Este es excesivamente simplificada, pero espero que pueda ver lo que estoy hablando aquí.

Otros consejos

No estoy seguro de que consiguiera su pregunta correcta, pero tal vez usted puede echar un vistazo a la href="http://twistedmatrix.com/trac/" rel="nofollow proyecto trenzado .

Como se puede ver en el FAQ, "Twisted es un motor de la creación de redes escrito en Python, el apoyo a numerosos protocolos. Contiene un servidor web, numerosos clientes de chat, servidores, servidores de correo, y más chatear. Trenzado se compone de una número de sub-proyectos que se puede acceder de forma individual [...]".

La documentación es bastante buena, y hay un montón de ejemplos en el Internet. Espero que ayuda.

supongo que depende de cómo atada está a Google Protocol Buffers, pero que le gustaría echa un vistazo a < strong> Ahorro .

  

Ahorro es un marco de software para   servicios de cambio de idioma escalables   desarrollo. Combina un software   apilar con un motor de generación de código para   crear servicios que funcionan de manera eficiente   y sin problemas entre C ++, Java,   Python, PHP, Ruby, Erlang, Perl,   Haskell, C #, cacao, Smalltalk, y   OCaml.

Hay un gran ejemplo para iniciarse en su página principal.

Una pregunta rápida: ¿por qué binario? Es la carga útil en sí binario, o hacer lo que prefieren un formato binario? Si el ex, es posible utilizar la codificación base64 con JSON o XML también; que hace uso de más espacio (~ 34%), y el bit más sobrecarga de procesamiento, pero no lo suficiente necesariamente a la materia para muchos casos de uso.

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