Frage

Ich arbeite an einem Client-Server-Programm zum ersten Mal, und ich fühle mich völlig unzureichend auf, wo zu beginnen, was ich tue.

Ich werde benutzen Google Protocol Buffers binäre Daten zwischen meinem Klienten zu übertragen und mein Server. Ich werde die Python-Variante zu verwenden. Die Grundidee, wie ich sie verstehe, ist, dass der Client die Daten serialisiert werden, ist es an den Server senden, der dann die Daten deserialisiert werden.

Das Problem ist, ich bin wirklich nicht sicher, wo für das Senden von binären Daten an den Server zu starten. Ich habe gehofft, es würde etwas „einfach“ wie eine HTTP-Anforderung sein, aber ich habe nach Möglichkeiten, um Google gesucht, um binäre Daten zu übertragen und in der großen Vielzahl von Tutorials, Anleitungen und Dokumentation verloren. Ich kann nicht einmal sagen, ob ich den Holzweg bin von HTTP-Übertragungen zu untersuchen (ich hatte gehofft, es zu benutzen, so konnte ich es klopfen eine Kerbe auf HTTPS, wenn Sicherheit erforderlich ist). Ich mag wirklich nicht auf die Ebene der Socket-Programmierung gehen zu müssen, obwohl - ich mag die Bibliotheken vor dem Einschalten zur Verfügung verwenden. (Ich würde auch Standard-Python-Bibliotheken bevorzugen, aber wenn es die perfekte 3rd-Party-Bibliothek, die ich leben werde.)

Also, wenn jemand einen guten Ausgangspunkt (oder will ein wenig selbst erklären), wie ein guter Weg, binäre Daten über Python zu übertragen, würde ich dankbar sein. Der Server läuft Ich bin derzeit Apache mit mod_python, übrigens ausgeführt wird.

War es hilfreich?

Lösung

Jedes Mal, wenn binäre Daten von einem System zum anderen gibt es ein paar Dinge zu bewegen, wirst im Auge zu behalten.

Verschiedene Maschinen speichern die gleichen Informationen anders. Dies hat Auswirkungen sowohl im Speicher und im Netzwerk. Weitere Informationen hier ( http://en.wikipedia.org/wiki/Endianness )

Weil Sie Python verwenden Sie selbst etwas Spiel hier schneiden kann (vorausgesetzt, der Client und Server wird sowohl in Python) und nur cPickle benutzen, um Ihre Daten zu serialisieren. Wenn Sie wirklich binär wollen, Sie gehen zu haben, mit Python-Struktur-Modul, um sich bequem ( http: //docs.python.org/library/struct.html ). Und lernen, wie zu packen / Ihre Daten entpacken.

Ich mag zunächst mit einfachen Line-Protokoll-Server starten, bis Sie über die Schwierigkeiten bei der Netzwerk-Kommunikation erhalten. Wenn Sie es noch nie getan, bevor es sehr schnell verwirrend. Wie Befehle zu erteilen, wie Daten zu übergeben, wie neu die Synchronisierung auf Fehler etc ...

Wenn Sie bereits die Grundlagen des Client / Server-Protokoll-Designs kennen, dann Verpackung üben und Auspacken binäre Strukturen auf der Festplatte zuerst. Ich beziehe mich auch auf die RFCs von HTTP und FTP für Fälle wie diesen.

------- EDIT ON KOMMENTAR -------- Normalerweise wird diese Art der Sache durch das Senden des Server einen „Header“ durchgeführt, die eine Prüfsumme für die Datei sowie die Größe der Datei in Bytes enthält. Beachten Sie, dass ich meine nicht einen HTTP-Header, können Sie anpassen es, wie Sie wollen. Die Kette der Ereignisse muss so etwas gehen ...

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"

Dies ist übermäßig vereinfacht, aber ich hoffe, Sie können sehen, was ich rede hier.

Andere Tipps

Ich bin mir nicht sicher, ob ich Ihre Frage richtig verstanden habe, aber vielleicht können Sie einen Blick auf die verdrehten Projekt .

Wie Sie in der FAQ sehen „, ist Verdrehte ein Networking-Engine in Python geschrieben und unterstützt zahlreiche Protokolle. Es enthält einen Web-Server, zahlreiches Chat-Clients, Chat-Server, Mail-Server, und vieles mehr. Verdrehte besteht aus einem Anzahl der Teilprojekte, die einzeln zugegriffen werden kann [...]“.

Die Dokumentation ist ziemlich gut, und es gibt viele Beispiele im Internet. Hoffe, es hilft.

Ich denke, es hängt davon ab, wie gebunden sind Sie zu Google Protocol Buffers, aber man vielleicht gefallen < strong> Thrift .

  

Thrift ist ein Software-Framework für   skalierbare Quersprachdienstleistungen   Entwicklung. Es kombiniert eine Software   Stapel mit einem Codeerzeugungs Motor   bauen Dienste, die effizient arbeiten   und nahtlos zwischen C ++, Java,   Python, PHP, Ruby, Erlang, Perl,   Haskell, C #, Kakao, Smalltalk, und   OCaml.

Es ist ein großartiges Beispiel für die auf ihrer Homepage begonnen.

Eine kurze Frage: Warum binäre? Ist die Nutzlast selbst Binär- oder bevorzugen Sie nur ein binäres Format? Wenn früher, ist es möglich zu Base64-Kodierung mit JSON oder XML zu verwenden; macht es mehr Platz (~ 34%) und mehr Verarbeitungsaufwand Bit, aber nicht unbedingt genug für viele Anwendungsfälle Rolle zu spielen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top