Question

Je travaille sur un programme client-serveur pour la première fois, et je me sens très insuffisants où commencer pour ce que je fais.

Je vais utiliser Google Protocol Buffers pour transférer des données binaires entre mon client et mon serveur. Je vais utiliser la variante Python. L'idée de base, que je comprends, est que le client sérialiser les données, l'envoyer au serveur, qui sera ensuite désérialiser les données.

Le problème est, je ne suis vraiment pas sûr où commencer pour envoyer des données binaires sur le serveur. J'espérais que ce serait quelque chose de « simple » comme une requête HTTP, mais j'ai cherché autour de Google pour des façons de transférer des données binaires et de se perdre dans la grande multitude de tutoriels, guides et documentation. Je ne peux même pas dire si je suis d'aboyer le mauvais arbre en enquêtant sur les transferts HTTP (j'espérais l'utiliser, pour que je puisse le frapper d'un cran vers HTTPS si la sécurité est nécessaire). Je ne veux pas avoir à passer au niveau de la programmation socket, mais - je voudrais utiliser les bibliothèques disponibles avant de se tourner vers cela. (Je préférerais également des bibliothèques standard de Python, mais s'il y a la bibliothèque 3ème fête parfaite je vivrai.)

Donc, si quelqu'un a un bon point de départ (ou veut expliquer un peu eux-mêmes) sur la façon dont une bonne façon de transférer des données binaires via Python, je serais reconnaissant. Le serveur en cours d'exécution est que je suis en cours d'exécution Apache avec mod_python, par la manière.

Était-ce utile?

La solution

Chaque fois que vous allez déplacer les données binaires d'un système à un autre couple de choses à garder à l'esprit.

Les différentes machines stockent les mêmes informations différemment. Cela a une incidence à la fois dans la mémoire et sur le réseau. Plus d'infos ici ( http://en.wikipedia.org/wiki/Endianness )

Parce que vous utilisez python, vous pouvez vous couper un peu de mou ici (en supposant que le client et le serveur à la fois par en python) et il suffit d'utiliser cPickle pour sérialiser vos données. Si vous voulez vraiment binaire, vous allez devoir se familiariser avec le module struct de python ( http: //docs.python.org/library/struct.html ). Et apprendre comment emballer / déballer vos données.

Je voudrais tout d'abord commencer avec des serveurs simples-protocole de ligne jusqu'à ce que vous avez passé la difficulté de communication réseau. Si vous ne l'avez jamais fait avant qu'il puisse se confondre très rapidement. Comment envoyer des commandes, comment transmettre les données, comment re-synchronisation sur les erreurs etc ...

Si vous connaissez déjà les bases de la conception du protocole client / serveur, puis la pratique emballage et le déballage des structures binaires sur votre premier disque. Je me réfère également aux RFC de HTTP et FTP pour les cas comme celui-ci.

------- EDIT BASÉ SUR UN COMMENTAIRE -------- Normalement, ce genre de chose se fait en envoyant au serveur une « tête » qui contient une somme de contrôle du fichier ainsi que la taille du fichier en octets. Notez que je ne veux pas un en-tête HTTP, vous pouvez personnaliser comme vous le voulez. La chaîne d'événements doit aller quelque chose comme ça ...

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"

est trop simplifiée, mais j'espère que vous pouvez voir ce que je parle ici.

Autres conseils

Je ne suis pas sûr que je suis votre bonne question, mais peut-être vous pouvez jeter un oeil au projet tordu .

Comme vous pouvez le voir dans la FAQ, « Twisted est un moteur de réseau écrit en Python, supportant de nombreux protocoles. Il contient un serveur web, de nombreux clients de messagerie instantanée, serveurs de chat, serveurs de messagerie, et plus encore. Twisted se compose d'un nombre de sous-projets individuellement accessibles [...] ».

La documentation est assez bonne, et il y a beaucoup d'exemples sur Internet. Espérons que cela aide.

Je suppose que cela dépend de la façon dont vous êtes lié à Google Protocol Buffers, mais vous pourriez aimer vérifier < strong> Thrift .

  

Thrift est un cadre logiciel pour   services évolutifs interlangage   développement. Il combine un logiciel   empiler avec un moteur de génération de code pour   créer des services qui fonctionnent efficacement   et de manière transparente entre C ++, Java,   Python, PHP, Ruby, Erlang, Perl,   Haskell, C #, cacao, Smalltalk, et   OCaml.

Il y a un excellent exemple pour commencer sur leur page d'accueil.

Une question rapide: pourquoi binaire? La charge utile lui-même binaire, ou préférez-vous juste un format binaire? Si l'ancien, il est possible d'utiliser le codage base64 avec JSON ou XML aussi; il n'utilise plus d'espace (~ 34%) et peu plus frais généraux de traitement, mais pas nécessairement assez d'importance pour de nombreux cas d'utilisation.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top