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