2011-01-05 5 views
0

Ich schreibe einen C-Daemon, den meine Webanwendung als Proxy für die Kommunikation mit FTP-Servern verwendet. Mit meiner Webanwendung können Benutzer über AJAX mit FTP-Sites eine Verbindung herstellen und interagieren. Der Grund, warum ich einen C-Daemon brauche, ist, dass ich keine Möglichkeit habe, FTP-Verbindungen über AJAX-Aufrufe hinweg aufrechtzuerhalten.Wie sollte ein Socket-basiertes Protokoll für einen C-Daemon aussehen?

Meine Web-Anwendung muss in der Lage sein, meinem Daemon zu sagen, Dateien für einen bestimmten Benutzer-Account aufzulisten, zu setzen, zu löschen, zu verschieben und umzubenennen. Wenn meine Anwendung also mit dem Daemon kommuniziert, muss sie folgendes über ein Protokoll definieren: 1) Aktion, 2) Verbindungs-ID, 3) Benutzer-ID, 4) alle zusätzlichen Parameter für die Aktion (Hinweis: Verbindungsinformationen werden in gespeichert eine Datenbank, also wird der Daemon auch damit sprechen).

Also das ist, was ich brauche meinen Daemon zu tun. Ich denke, die Kommunikation zwischen meiner Web-App und dem Daemon wird über einen TCP-Socket stattfinden, aber ich weiß nicht genau, welche Daten ich senden würde. Ich brauche ein Beispiel. Zum Beispiel, sollte ich etwas über den Socket an den Daemon schicken?

action=list&connection_id=345&user_id=12345&path=/some/path 

oder sollte ich etwas Hardcore auf der Byte-Ebene tun, so?

+-----------------+-------------------------+-------------------+-----------------------------------+ 
| 1 byte (action) | 4 bytes (connection id) | 4 bytes (user id) | 255 bytes (additional parameters) | 
+-----------------+-------------------------+-------------------+-----------------------------------+ 
| 0x000001  | 345      | 12345    | /some/path      | 
+-----------------+-------------------------+-------------------+-----------------------------------+ 

Wie sieht eine solche Kommunikation normalerweise aus?

Antwort

1

Binäre Protokolle sind etwas einfacher zu handhaben. Fügen Sie der Nachricht einfach die Länge voran (oder nur den variablen Teil davon) - TCP weiß nichts über die Nachrichtengrenzen auf Anwendungsebene. Achten Sie auf die Nummer endianness.

Auf der anderen Seite sind textbasierte Protokolle flexibler.

Schauen Sie sich auch Google Protocol Buffers an - könnte sehr nützlich sein, obwohl ich nicht sicher bin, ob AJAX unterstützt wird.

1

Eigentlich geht es hauptsächlich darum, welches Format Sie am einfachsten verschlüsseln und parsen können, weshalb ich das Rad nicht mit meinem eigenen Protokoll neu erfinden würde, sondern persönlich mit einer bestehenden Fernprozeduraufruflösung. Meine zweite Wahl wären die Bitfelder, da das Ein- und Auspacken sehr einfach ist.

1

Sie müssen nicht unbedingt Ihr eigenes Protokoll implementieren. Haben Sie darüber nachgedacht, etwas wie XML-RPC oder einfach nur XML zu verwenden? Es gibt C-Bibliotheken, die Sie analysieren sollten.

+0

Ich habe nicht darüber nachgedacht, aber jetzt habe ich etwas anderes zu untersuchen. Danke für das Erwähnen! –

Verwandte Themen