Programmierung Client/Server synchroner aufruf

Hallo,

kann mir bitte jemand eine Frage etwas deutlicher erklären:

„Was ist der unterschied zwischen synchroner und asynchroner Beauftragung eines Servers durch einen Klient UND warum ist die Programmierung für den asynchronen Aufruf einfacher“

Also ich konnte mal soviel rausschreiben:

synchron: Sender blockiert bis Antwort vom Server eingetroffen
asynchron: Sender wird nur für die Einleitung des Kommunikationsvorgang verzögert.

Das ist jetzt auch prima, nur kann ich nicht erklären warum das eine leichter und das andere schwerer sei zu programmieren? Habs ja nie programmieren müssen ^^ Jemand eine Idee?

Danke und Gruß

Guten Morgen!

Du hast den Unterschied eigentlich schon hinreichend erklärt. Bei synchronem Aufruf wartet der Client auf Antwort vom Server, bei asynchronem Aufruf wartet er nicht.

Dass asynchron leichter ist, hätte ich jetzt so nicht gesagt, ich finde synchron leichter. Es kann aber auch eine Frage der verwendeten Programmiersprache sein. Wenn ich Signals/Slots bereits vorprogrammiert habe, dann ist asynchron sicher leicht. Aber synchron ist auch insofern leichter, als dass man nicht aufpassen muss, was zwischen dem Absenden der Anfrage und der Antwort alles passieren kann.

Bei der asynchronen Anfrage kommt die Antwort ja irgendwann plötzlich mitten im weiteren Ablauf des Programms. Je nach Art der Anwendung finde ich das durchaus komplizierter, manchmal sogar gar nicht wünschenswert.

Liebe Grüße,
-Efchen

Hallo Fragewurm,

Das ist jetzt auch prima, nur kann ich nicht erklären warum
das eine leichter und das andere schwerer sei zu
programmieren? Habs ja nie programmieren müssen ^^ Jemand eine
Idee?

Bei synchronen Aufrufen kommt es gerne zu (Dead)locks, wenn man nicht aufpasst:
http://de.wikipedia.org/wiki/Deadlock
http://de.wikipedia.org/wiki/Lock

Wenn die Schnittstelle kein Timeout implementiert hat, wartet dein Client ewig und drei Tage auf eine Rückmeldung, obwohl der Fehler z.B. im Server liegt. Da dein Task vertagt bleibt, kannst du auch keine Fehlermeldung ausgeben oder ein Recovery versuchen …

MfG Peter(TOO)

Das kommt natürlich immer darauf an, ob es ein asynchroner Aufruf mit Callback ist, oder einer ohne.
So wie ich die Frage verstehe, ist hier der asynchrone Aufruf ohne Callback gemeint. Natürlich hat man in diesem Fall keine Möglichkeit zu überprüfen, ob beim Aufruf alles glatt läuft, in vielen Fällen ist das aber auch nicht nötig.

In diesem Fall ist der asynchrone Aufruf natürlich einfacher, da hier nur der Request geschickt wird, und anschließend mit der normalen Programmausführung weiter gemacht werden kann.
Beim synchronen Aufruf musst du gegebenenfalls noch eine Möglichkeit finden, wie der aufrufende Prozess das Warten implementiert. Zudem muss hier eine bidirektionale Kommunikation stattfinden - irgendwie muss dem Aufrufer ja mitgeteilt werden, dass die Anfrage abgearbeitet wurde.

Wenn du einen asynchronen Aufruf mit Callback machst hast du natürlich vollkommen recht. Hier ist ja die komplette Funktionsweiße des synchronen Aufrufs erforderlich, mit dem Zusatz, dass der Programmablauf soweit fortgesetzt wird, bis der Callback kommt.

Verschrieben!

UND warum ist die Programmierung für den asynchronen Aufruf einfacher"

Sorry habe mich verschrieben. Sollte heißen, warum für den SYNCHRONEN Aufruf einfacher…

Gruß