Hallo,
gibt es irgendwelche Standards, wie man Client/Server-Protokolle beschreibt? Es soll aus den Beschreibungen der komplette Source für die Netzwerkkommunikation erzeugt werden, so daß man als Programmierer noch nicht mal wissen muß daß da überhaupt was übers Netz läuft.
Bisher sind mir da nur 3 über den Weg gelaufen:
1) XML-RPC: Nicht geeignet, da zu limitiert, und sich auf HTTP als Transportmedium zu beschränken sollte nicht wirklich Teil des Standards sein (aber das nur als Nebenbemerkung)
2) EBNF: Zu komplex, aber eine Beschreibung wäre eventuell möglich (wenn auch umständlich).
3) SOAP: Wie XML-RPC nicht stateful, kommt deshalb auch nicht in Frage.
Ich hab erstmal was eigenes erfunden, aber das hat noch bei 2 Stellen Probleme: Datenübergabe von Arrays (die Funktion heißt im Moment void foo(int x1, int x2, int x3, int x4, int x5, int x6, ...), und das ist bei großen Arrays nicht so toll), und Bedingungen, z.B. daß nach Opcode 14 erstmal ein Int gelesen wird, und wenn der -5 ist dann noch ein String, sonst nicht.
Jetzt hoffe ich, daß man sowas überhaupt realisieren kann - ich kenne bisher kein solches Projekt.
Josef Spillner
On Tue, Apr 23, 2002 at 05:31:29PM +0200, Josef Spillner wrote:
Hallo,
gibt es irgendwelche Standards, wie man Client/Server-Protokolle beschreibt? Es soll aus den Beschreibungen der komplette Source für die Netzwerkkommunikation erzeugt werden, so daß man als Programmierer noch nicht mal wissen muß daß da überhaupt was übers Netz läuft.
Bisher sind mir da nur 3 über den Weg gelaufen:
- XML-RPC: Nicht geeignet, da zu limitiert, und sich auf HTTP als
Transportmedium zu beschränken sollte nicht wirklich Teil des Standards sein (aber das nur als Nebenbemerkung)
- EBNF: Zu komplex, aber eine Beschreibung wäre eventuell möglich (wenn auch
umständlich).
- SOAP: Wie XML-RPC nicht stateful, kommt deshalb auch nicht in Frage.
EBNF und XML-RPC kann man nicht miteinander vergleichen. Das sind zwei verschiedene Dinge. Mit EBNF (Extended Backus-Naur Form) kann man eine Syntax beschreiben. XML und die meisten Programmiersprachen kann man in EBNF spezifizieren.
XML-RPC ist die Implementierung eines RPC (Remote Procedure Call) per http.
Wenn du eine Norm suchst wie man Protokolle theoretisch beschreibt, dann suche im Netz mal nach OSI Referenzmodel. Ich kann dir auch mal den Netzwerke-Tanenbaum mitbringen. In dem Buch ist unter anderem das Referenzmodel beschrieben. Doch viel nützen wird dir das wahrscheinlich nichts, auch wenn es sehr interessant ist, da du sicherlich auf TCP aufbaust und dich somit die darunterliegenden Schichten nicht interessieren.
Ich hab erstmal was eigenes erfunden, aber das hat noch bei 2 Stellen Probleme: Datenübergabe von Arrays (die Funktion heißt im Moment void foo(int x1, int x2, int x3, int x4, int x5, int x6, ...), und das ist bei großen Arrays nicht so toll), und Bedingungen, z.B. daß nach Opcode 14 erstmal ein Int gelesen wird, und wenn der -5 ist dann noch ein String, sonst nicht.
Was kann dein Protokoll was XML-RPC nicht kann? Ich finde XML-RPC sehr clever, außer dass es bei mir Probleme bei der Übertragung von binären Daten gab. Habe gehört man sollte die Daten erste base64 codieren.
Die Idee http zu benutzen sehe ich als Vorteil und nicht als Nachteil. Bei vielen Firmen ist ein Zugang zum Internet nur per Http-Proxy möglich. Wenn du TCP/IP verwendest hast du dort ein Problem.
Jetzt hoffe ich, daß man sowas überhaupt realisieren kann - ich kenne bisher kein solches Projekt.
Was ist "sowas"? Mir nicht klar, ob du eine Syntax zur Beschreibung des Protokoll suchst (EBNF) oder eine Implementierung (XML-RPC).
Der Nachteil an XML-RPC ist, dass man nur einfache Datentypen übertragen kann. Man kann keine Objekte übertragen. Folgendes geht nicht:
server=xmlrpc.Server("http://foo/bar") obj=server.func() obj.do_it()
In Python gibt es noch Pyro (http://pyro.sourceforge.net/). Das ist umfangreicher als XML-RPC. Es ist ähnlich wie RMI in Java.
thomas
On Tue, 23 Apr 2002 17:31:29 +0200, Josef Spillner wrote:
Ich hab erstmal was eigenes erfunden, aber das hat noch bei 2 Stellen Probleme: Datenübergabe von Arrays (die Funktion heißt im Moment void foo(int x1, int x2, int x3, int x4, int x5, int x6, ...), und das ist bei großen Arrays nicht so toll), und Bedingungen, z.B. daß nach Opcode 14 erstmal ein Int gelesen wird, und wenn der -5 ist dann noch ein String, sonst nicht.
Fürs serialisieren/kodieren der üblichen Basisdatentypen kannst du mal einen Blick auf XDR (man xdr, rfc1832) werfen. C, perl, phyton usw. haben libs dafür. XDR kennt auch "Problemtypen" wie structs+unions und optionale Elemente.
Über das, was du oben gefragt hast, können wir heute abend reden. Der einzige mir bekannte Standard, der Protokolle allumfassend spezifizieren will, ist SDL (www.sdl-forum.org). Das ist sicher Overkill. Dir scheint es nur um Datentypen und deren Übertragung zu gehen, nicht aber um zeitliche Abfolgen. Da wirst mit einem Mix aus verschiedenen Standards sicher besser bedient sein. Die automatische Erzeugung des Netzwerkkodes halte ich für möglich.
Reinhard
On Wednesday 24 April 2002 14:10, Reinhard Foerster wrote:
Über das, was du oben gefragt hast, können wir heute abend reden. Der einzige mir bekannte Standard, der Protokolle allumfassend spezifizieren will, ist SDL (www.sdl-forum.org). Das ist sicher Overkill.
Habs mir erstmal nur ganz grob angesehen.
Dir scheint es nur um Datentypen und deren Übertragung zu gehen, nicht aber um zeitliche Abfolgen. Da wirst mit einem Mix aus verschiedenen Standards sicher besser bedient sein. Die automatische Erzeugung des Netzwerkkodes halte ich für möglich.
Na mal schauen. Es sollte flexibel sein, aber die Zielgruppe (Programmieranfänger bis Fortgeschrittene) nicht überlasten.
Genügend Stoff zu diskutieren für heute abend hätten wir also, zumal ja XFree86 Geburtstag hat, und sowohl in Togo als auch in Swaziland Nationalfeiertag ist... man calendar(1) :)
Josef Spillner
lug-dd@mailman.schlittermann.de