Domanda

Sto lavorando su un programma client-server per la prima volta, e mi sento del tutto inadeguato su dove cominciare per quello che sto facendo.

Ho intenzione di utilizzare Google buffer protocollo per trasferire i dati binari tra il mio cliente e il mio server. Ho intenzione di utilizzare la variante di Python. L'idea di base, mi pare di capire, è che il cliente si serializzare i dati, inviare al server, che poi deserializzare i dati.

Il problema è che io non sono davvero sicuro da dove cominciare per l'invio di dati binari al server. Speravo che sarebbe stato qualcosa di "semplice" come una richiesta HTTP, ma ho cercato in giro per Google modi per trasferire i dati binari e perdersi nella moltitudine di tutorial, guide e documentazione. Non posso nemmeno dire se sto abbaiare contro l'albero sbagliato indagando trasferimenti HTTP (speravo di usarlo, così ho potuto battere su una tacca a HTTPS se la sicurezza è necessario). Io davvero non voglio avere a passare al livello di programmazione dei socket, anche se - mi piacerebbe utilizzare le librerie disponibili prima di passare a quello. (Mi piacerebbe anche preferisco le librerie standard di Python, anche se c'è la libreria 3rd party perfetto vivrò.)

Quindi, se qualcuno ha un buon punto di partenza (o vuole spiegare un po 'se stessi) su come un buon modo per trasferire dati binari tramite Python, sarei grato. Il server sono in esecuzione è in esecuzione Apache con mod_python, tra l'altro.

È stato utile?

Soluzione

Ogni volta che si sta andando a spostare i dati binari da un sistema all'altro c'è un paio di cose da tenere a mente.

Macchine diverse memorizzare le stesse informazioni in modo diverso. Questo ha implicazioni sia nella memoria e sulla rete. Maggiori informazioni qui ( http://en.wikipedia.org/wiki/Endianness )

Perché stai usando python si può tagliare da soli un certo allentamento qui (assumendo che il client e server saranno entrambi da in python) e basta usare cPickle per serializzare i dati. Se si vuole veramente binario, si sta andando ad avere per mettersi a proprio agio con il modulo struct di python ( http: //docs.python.org/library/struct.html ). E imparare a imballare / decomprimere i dati.

Desidero in primo luogo iniziare con semplici server line-protocollo fino a superare la difficoltà di comunicazione di rete. Se non hai mai fatto prima si può ottenere confuso molto veloce. Come emettere comandi, come passare i dati, come re-sincronizzazione in caso di errori, ecc ...

Se si conosce già le basi del disegno protocollo client / server, poi pratica e disfare strutture binarie sul disco prima. Mi riferisco anche alle RFC di HTTP e FTP per casi come questo.

------- EDIT BASATI SU COMMENTO -------- Normalmente questo genere di cose è fatta inviando al server un "header" che contiene un checksum per il file così come la dimensione del file in byte. Si noti che io non intendo un header HTTP, è possibile personalizzare come vuoi. La catena di eventi ha bisogno di andare qualcosa di simile ...

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"

Questa è eccessivamente semplificata, ma spero che si può vedere che cosa sto parlando qui.

Altri suggerimenti

Credo che dipende da come si è legato a Google buffer protocollo, ma come si potrebbe verificare < strong> Thrift .

  

Thrift è un framework software per   servizi cross-language scalabili   sviluppo. Esso combina un software   raggrupparsi con un motore di generazione di codice di   costruire servizi che funzionano in modo efficiente   e senza soluzione di continuità tra il C ++, Java,   Python, PHP, Ruby, Erlang, Perl,   Haskell, C #, cacao, Smalltalk, e   OCaml.

C'è un grande esempio per iniziare sulla loro home page.

Una domanda veloce: perché binario? È il carico utile in sé binario, o avete semplicemente preferisce un formato binario? Se l'ex, è possibile utilizzare la codifica Base64 con JSON o XML troppo; si fa uso di più spazio (~ 34%), e po 'più carico di elaborazione, ma non necessariamente sufficiente avere importanza per molti casi d'uso.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top