Pergunta

Eu estou trabalhando em um programa cliente-servidor pela primeira vez, e estou me sentindo totalmente inadequada sobre por onde começar para o que estou fazendo.

Eu vou usar Google Protocol Buffers para transferir dados binários entre meu cliente e meu servidor. Eu vou estar usando a variante Python. A idéia básica, como eu entendo, é que o cliente irá serializar os dados, enviá-lo para o servidor, que irá anular a serialização de dados.

O problema é, eu estou realmente não tenho certeza por onde começar para o envio de dados binários para o servidor. Eu estava esperando que seria algo "simples" como uma solicitação HTTP, mas eu tenho procurado em torno do Google para formas de transferir dados binários e se perder na vasta multidão de tutoriais, guias e documentação. Eu não posso nem dizer se estou latindo para a árvore errada por investigar transferências HTTP (eu estava esperando para usá-lo, para que eu pudesse bater-se um entalhe para HTTPS se é necessária segurança). Eu realmente não quero ter que ir para o nível de programação de socket, embora - eu gostaria de usar as bibliotecas disponíveis antes de ligar a isso. (Eu também prefiro bibliotecas Python padrão, embora se há a biblioteca perfeito 3rd party eu vou viver.)

Então, se alguém tem um bom ponto de partida (ou quer explicar um pouco em si) sobre como uma boa maneira de transferir dados binários via Python, eu ficaria grato. O servidor que eu estou correndo está atualmente rodando Apache com mod_python, pela maneira.

Foi útil?

Solução

Toda vez que você está indo para mover dados binários de um sistema para outro há um par de coisas para manter em mente.

Diferentes máquinas armazenar a mesma informação de forma diferente. Isto tem implicações tanto na memória e na rede. Mais informações aqui ( http://en.wikipedia.org/wiki/Endianness )

Porque você está usando python você pode cortar-se alguma folga aqui (supondo que o cliente eo servidor será tanto por em python) e usar apenas cPickle para serializar seus dados. Se você realmente quer binário, você vai ter de se sentir confortável com o módulo struct do python ( http: //docs.python.org/library/struct.html ). E aprender como embalar / descompactar os dados.

Gostaria em primeiro lugar começar com servidores de protocolo de linha simples até chegar passado a dificuldade de comunicação de rede. Se você nunca fez isso antes que ele pode ficar confusa muito rápido. Como emitir comandos, como passar os dados, como re-sync sobre erros etc ...

Se você já sabe o básico do projeto do protocolo cliente / servidor, em seguida, praticar a embalagem e descompactar estruturas binários em seu primeiro disco. I também se referem às RFCs de HTTP e FTP para casos como este.

------- EDIT base no comentário -------- Normalmente, este tipo de coisa é feito enviando o servidor um "header" que contém uma soma de verificação do arquivo, bem como o tamanho do arquivo em bytes. Note que eu não quero dizer um cabeçalho HTTP, você pode personalizá-lo como quiser. A cadeia de eventos precisa ir algo assim ...

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"

Esta é excessivamente simplificado, mas eu espero que você possa ver o que estou falando aqui.

Outras dicas

Eu não tenho certeza eu tenho a pergunta certa, mas talvez você pode dar uma olhada na .

Como você pode ver na FAQ, "Twisted é um mecanismo de rede escrito em Python, apoiando inúmeros protocolos. Ele contém um servidor web, numerosos clientes de bate-papo, os servidores de bate-papo, servidores de correio, e muito mais. Trançado é composto de um número de sub-projectos que podem ser acessados ??individualmente [...]".

A documentação é muito bom, e há muitos exemplos na internet. Espero que ajude.

Eu acho que isso depende de como amarrado você é a Google Protocol Buffers, mas você pode gostar de verificar < strong> Thrift .

Thrift é uma estrutura de software para serviços de cross-language escaláveis desenvolvimento. Ele combina um software empilhar com um motor de geração de código para serviços de construção que trabalham de forma eficiente e perfeitamente entre C ++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C #, Cacau, Smalltalk, e OCaml.

Há um grande exemplo para começar a trabalhar em sua home page.

Uma pergunta rápida: por binário? É a própria carga de binário, ou você simplesmente preferem um formato binário? Se o ex, é possível usar codificação Base64 com JSON ou XML também; ele faz uso de mais espaço (~ 34%), e pouco mais processamento sobrecarga, mas não necessariamente suficiente para importa para muitos casos de uso.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top