![]() |
(A)Synchrone Netzwerkverbindung
Hi,
Wollte mal fragen, was der Unterschied zwischen einer synchronen und asynchronen TCP-Verbindung ist. Was sind die Vorteile/Nachteile? Wofür verwendet man was? Und wie realisiert man asynchrone TCP-Verbindungen (in Delphi?) Gruß Neutral General |
Re: (A)Synchrone Netzwerkverbindung
Naja, das ganze dürfte äquivalent zur (a)synchronen Programmierung im allgemeinen sein.
Sprich Synchron bedeutet: Du lädst beispielsweise eine Datei herunter und die procedure oder function kehrt zum Hauptprogramm zurück, sobald der Downlaod beendet ist - während selbiges dadurch blockiert wird. Asynchron bedeutet du startest den Download, und machst mit deinem Programm ganz normal weiter. Wann der Download fertig ist, interessiert dann erstmal nicht (Multithreading vs. Singlethreading). Oder anderes Beispiel: Du schickst an einen Server eine Anfrage und willst wissen, wie viele Clients er gerade verbunden hat. Bei synchroner Programmierung läuft dein Programm solange nicht weiter, bis es eine Antwort hat. Bei asynchroner ist es egal wann der Server die Antwort schickt, irgendwann kommt sie halt und dann kannst du damit weiterarbeiten. Dauerhaft offene TCP-Verbindungen dürften sich sowieso nur asynchron sinnvoll implementieren lassen (da ja sonst irgendwie dein Programm allein durch das offenhalten der Verbindung blockiert würde :gruebel: ). Vorteil und Nachteil? Ich würde sagen, kommt ganz auf den Einsatzzweck an. Problem (wie bei allen asynchronen Sachen) ist: Die Synchronisierung ;) Sprich du musst genau aufpassen was du wann mit welchen Daten machen kannst bzw. wann diese zur Verfügung stehen. Das weißt du bei synchroner Programmierung einfach immer sicher! |
Re: (A)Synchrone Netzwerkverbindung
Hi,
Danke für die Antwort soweit :) Zitat:
|
Re: (A)Synchrone Netzwerkverbindung
Zitat:
Wenn du die Indys, Synapse oder sonst ne Library verwendest, musst du i.d.R. garnicht aufpassen, weil dir hier ja schön die Events beim Datenempfang u.ä. bereitgestellt werden (zumindest die Indys sind glaube ich auch von Haus aus schon multithreaded). Wenn du dir allerdings selbst irgendeine Funktion zusammenbaust kann folgendes passieren: 1. Du schickst eine asynchrone Anfrage an einen Server (sprich du führst sie in einem eigenen Thread aus). 2. Der Server ist gerade nicht erreichbar, sprich dein Thread arbeitet sich nen Ast ;) 3. Dein Programm bekommt davon aber weiter nichts mit, weil du keine ausreichende Kontrollfunktion implementiert hast... 4. Du versuchst mit der Antwort vom Server (die ja nie bei dir angekommen ist) irgendwann irgendetwas zu machen, beispielsweise hättest du einen Integer erwartet, aber nichts bekommen, castest also nichts auf Integer und bumms ist dein Programm abgestürzt ;) Das gleiche kann auch passieren, wenn der Server antwortet, aber du schneller auf die Antwort zugreifen willst, als sie verfügbar ist, beispielsweise wenn du die Methode, die die Antwort braucht, direkt nach dem Start der asynchronen Anfrage ausführst. Dann ist die Methode nämlich mit ziemlicher Sicherheit schneller als deine Internetverbindung ;) |
Re: (A)Synchrone Netzwerkverbindung
Hi,
Ok soweit verstanden. Allerdings arbeitet sowohl Synapse als auch die Indies synchron wenn ich mich nicht täusche. Kennst du (oder jemand anderes) eine Library die asynchron arbeitet? |
Re: (A)Synchrone Netzwerkverbindung
Ich dachte eigentlich die Indys wären schon asynchron :gruebel: KAnnste aber leicht asynchronisieren, indem du sie in Threads auslagerst ;)
ICS sollte aber von Haus aus asynchron arbeiten: ![]() Siehe dazu auch ![]() |
Re: (A)Synchrone Netzwerkverbindung
Hallo,
Unter asynchroner Kommunikation versteht man in der Informatik und Netzwerktechnik einen Modus der Kommunikation, bei dem das Senden und Empfangen von Daten zeitlich versetzt und ohne Blockieren des Prozesses durch bspw. Warten auf die Antwort des Empfängers (wie bei synchroner Kommunikation der Fall) stattfindet. Unter synchroner Kommunikation versteht man in der Informatik und Netzwerktechnik einen Modus der Kommunikation, bei dem die Kommunikationspartner (Prozesse) beim Senden oder beim Empfangen von Daten immer synchronisieren, also warten (blockiert), bis die Kommunikation abgeschlossen ist. Wird sowohl beim Senden als auch beim Empfangen gewartet (der Sender stellt also eine Anfrage und wartet auf Antwort), so entspricht das einem Rendezvous der beiden beteiligten Prozesse. Das Blockieren des Prozesses wird intern durch geeignete Mechanismen zur Prozesssynchronisation erreicht. Grüsse Rainer |
Re: (A)Synchrone Netzwerkverbindung
Hi,
kleines Beispiel für die idHTTP Komponente im Thread: Client / Server Threading mit Indy ![]() Gruß s! |
Re: (A)Synchrone Netzwerkverbindung
Und du gehst einfach mal davon aus dass hier jeder (und NG im speziellen) einen EE-Account hat :gruebel:
@Rainer: Danke, dass du alles nochmal bestätigt hast, was ich schon geschrieben habe :mrgreen: |
Re: (A)Synchrone Netzwerkverbindung
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:47 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz