AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Indy Server und Client

Ein Thema von Briand · begonnen am 19. Apr 2014 · letzter Beitrag vom 28. Apr 2014
Antwort Antwort
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.352 Beiträge
 
Delphi 11 Alexandria
 
#1

AW: Indy Server und Client

  Alt 19. Apr 2014, 10:05
@mjustin:

Ist folgende (vereinfachte) Beschreibung richtig?

Der Server arbeitet die Anfragen automatisch in Threads ab. Das heißt, der Mainthread wird durch die Abfragen nicht gebremst.
Der Server muss immer mal etwas Zeit zum aufräumen haben. Zu viele ständige Anfragen in kurzer Zeit verkraftet er nicht.
Der Client muss dagegen in einem extra Thread ausgeführt werden, wenn er den Mainthread nicht bremsen soll.
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.010 Beiträge
 
Delphi 2009 Professional
 
#2

AW: Indy Server und Client

  Alt 19. Apr 2014, 12:41
Der Server arbeitet die Anfragen automatisch in Threads ab. Das heißt, der Mainthread wird durch die Abfragen nicht gebremst.
Der Server muss immer mal etwas Zeit zum aufräumen haben. Zu viele ständige Anfragen in kurzer Zeit verkraftet er nicht.
Der Server benötigt nicht generell "besondere" Zeit zum Aufräumen: er benötigt Zeit, falls umfangreiche Objekte /und Resourcen während OnExecute erzeugt und freigegeben werden. Falls viele Anfragen gleichzeitig eintreffen, werden diese auf vorhandene Prozessoren verteilt und konkurrieren um die Rechenleistung, so dass der Server bis 100% ausgelastet ist.
Das Sleep(1000); im OnExecute sorgt dafür, dass der Server einmal pro Sekunde Daten an den Client sendet. Wenn der Client innerhalb von 500 Millisekunden keine Antwort erhält, erhält er ein Timeout, und versucht dann sofort wieder Daten zu empfangen. Der Server sendet nur, wenn er gerade "will" - im Beispielcode also erst nach Ablauf einer Sekunde. Client und Server müssen nicht zeitsynchronisiert sein: wenn der Server das Intervall ändert (zum Beispiel immer zwanzig Sekunden zu pausieren), muss der Client Code nicht geändert werden.
Michael Justin
habarisoft.com

Geändert von mjustin (19. Apr 2014 um 12:46 Uhr)
  Mit Zitat antworten Zitat
Briand
(Gast)

n/a Beiträge
 
#3

AW: Indy Server und Client

  Alt 28. Apr 2014, 22:41
Hab das ganze mal versucht nach Stahlis Anleitung zu machen und es funktioniert.
Allerdings wie kann ich vom Server nen String an den Client schicken peer Botton klick?
Funktioniert das nur im Server.OnExecute Ereigniss?

Weil ich möchte was schicken wenn ich nen Botton klicke.


L.g Briand
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.352 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Indy Server und Client

  Alt 28. Apr 2014, 23:00
Ich versuche, das mal korrekt zusammen zu fassen - so dass ich es auch verstehe.

Über die Indys fragt normalerweise der Client1 oder Client2 beim Server an.
Der Server startet einen Thread, berechnet darin die Antwort (man sollte also im OnExecute nicht auf die GUI o.ä. zugreifen ohne vorher Konflikte abzusichern) und schickt die Antwort an den anfragenden Client zurück.
Nach einer gewissen Zeit räumt der Server dann zyklisch den verbrauchten Speicher bzw. die Verbindungen wieder auf.
Deshalb ist es grundsätzlich besser, selten größere Datenpakete zu übertragen als extrem oft kleine.

Wenn der Server von sich aus eine Nachricht an einen Client senden will wird das schwieriger.
Zum einen muss der Server alle Clients kennen (Details kann ich nicht beschreiben) und die Server müssen dauernd lauern, ob eine Nachricht anliegt.
Alternativ können alle Clients natürlich auch zyklisch beim Server anfragen "Hey, hat jemand bei Dir Button1 gedrückt", worauf ja oder nein zurück kommt.
Welches der beiden Varianten der bessere Weg wäre kann ich nicht sagen.

Grundsätzlich ist Indy aber wohl eher auf Frage(hin)-Antwort(zurück) ausgerichtet.
Man könnte sonst noch beide Seiten mit jeweils einem Server und einem Client ausstatten.
Für so etwas wie Chats sollten aber Sockets (peer to peer) effektiver einsetzbar sein.


(Ich lasse mich gern korrigieren, wenn das noch nicht ganz passt.)



[EDIT]
Schau mal noch hier: http://www.delphipraxis.net/180134-i...ptimieren.html
Das könnte nützlich sein.

[EDIT2]
Oups, jetzt habe ich irgendwie den Überblick über die Indy-Beiträge verloren.
mjustin hat Deine Frage unter #3 ja fast beantwortet.
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)

Geändert von stahli (28. Apr 2014 um 23:28 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:49 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