AGB  ·  Datenschutz  ·  Impressum  







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

Indy-Komponenten

Ein Thema von blablab · begonnen am 18. Mai 2007 · letzter Beitrag vom 19. Mai 2007
Antwort Antwort
Seite 1 von 2  1 2      
blablab

Registriert seit: 3. Jan 2006
509 Beiträge
 
Delphi 7 Enterprise
 
#1

Indy-Komponenten

  Alt 18. Mai 2007, 14:32
Hallo!

Ich dachte immer, man kann die Indy-Komponenten mit den restlichen Komponenten die Delphi bereitstellt vergleichen. Aber kann es sein, dass die Indy-Komponenten um einiges schlechter sind?

Ich hab bis jetzt die Komponenten nur für Http, TCP und UDP verwendet. Aber ich hab damit schon relativ viel schlechte Erfahrungen gemacht.
Z.B bekommt der Server der TCP oder UDP Komponente ein Ereignis bei einer eintreffenden Nachricht, der Client nicht. Beim Client muss man dann selbst pollen und lustigerweise blockiert das dann die Anwendung und man braucht zusätzlich eine Anti-Freeze-Komponente...
Und zb bei der idHttP-Komponente ist mir aufgefallen, dass es bei Get() kein einheitliches TimeOut gibt. (Und selbst einstellen kann man das TimeOut dummerweise auch nicht...) Mal bricht er das Verbinden nach 5s ab, mal erst nach 20s. Und es ist bei mir auch schon vorgekommen, dass Get() überhaupt nicht mehr abgebrochen hat, so dass ich das Programm dann nach einer halben Stunde beenden musste.
Und außerdem brauchen die Komponenten zusätzlich noch sehr viel Speicherplatz, wobei mir das eigentlich egal wäre, würden sie wenigstens gescheit funktionieren...

Was ich eigentlich fragen wollte ist, ob ihr auch so schlechte Erfahrungen mit den Indy-Komponenten gemacht habt? Benutzt ihr oft diese Komponenten oder weicht ihr auf andere Lösungen aus? Ist das bei anderen Indy-Komponenten auch so?
Kurz: Was haltet ihr von den Indy-Komponenten?

Simon
  Mit Zitat antworten Zitat
CCRDude
(Gast)

n/a Beiträge
 
#2

Re: Indy-Komponenten

  Alt 18. Mai 2007, 14:37
Sag doch erstmal vorab, ob Du Dich auf Indy 9 oder Indy 10 beziehst?

Indy 9 finde ich teilweise auch ziemlich übel - ist nicht wirklich sauber, sprich beim Beenden eines Programmes, das Indy 9-Komponenten benutzt, wird beispielsweise eine TCriticalSection nicht korrekt freigegeben. Unter Vista macht das teilweise richtig Probleme.

Ich benutze inzwischen Synapse und/oder die Wininet-API, wobei ich neulich auch mal einen Blick auf Indy 10 geworfen habe und das besser als Indy 9 finde.
  Mit Zitat antworten Zitat
Udontknow

Registriert seit: 17. Jun 2002
223 Beiträge
 
#3

Re: Indy-Komponenten

  Alt 18. Mai 2007, 14:47
Hallo!

Bezüglich TCP: Der Server hat eben kein Ereignis für ankommende Daten. OnExecute ist nur die Routine, die vom für die Verbindung bereitgestellten Thread angestossen wird, es wird direkt beim Connect angestossen. Mit dem Empfang von Daten hat das Ereignis nichts zu tun, dafür musst du ja dort auch wieder Read /Readln etc. aufrufen. Da der Server eben auch immer einen neuen Thread für eine Verbindung kreiert, gibt es dort kein "Blocking" des VCL-Threads.

Wie sollte Indy denn deiner Meinung nach das beim Client realisieren? Soll bei jedem eintreffenden Byte ein Ereignis getriggert werden?

Im Client musst du eben das Einlesen von Daten selber managen. Schau dir doch mal die SimpleTCP-Komponenten von mir an, dort realisiere ich es so, daß in einem separaten Thread Daten gesammelt werden und erst bei "Vollständigkeit" (bei mir komplette Übertragung eines Streams) per Synchronize ein Event getriggert wird.

Cu,
Udontknow
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#4

Re: Indy-Komponenten

  Alt 18. Mai 2007, 15:26
Die ICS-Komponenten von Francois Piette (www.overbyte.be) sind auch ziemlich generisch. Dort fliegen dir die Events nur so um die Ohren.

Soweit ich das kapiert habe, sind die Indies auf Einfachheit und Usability ausgelegt, u.U. mit Einschränkungen (was bei so einer Prämisse nicht auszuschließen ist). Genau weiß ich das aber nicht.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Benutzerbild von Meflin
Meflin

Registriert seit: 21. Aug 2003
4.856 Beiträge
 
#5

Re: Indy-Komponenten

  Alt 18. Mai 2007, 15:32
Was ich von den Indys halte?

Das beste, was du zu dem Preis bekommst. Und ob die kostenpflichtigen Alternativen so viel besser sind, wage ich zu bezweifeln. Denn die Indys sind insgesamt doch ziemlich gut! Ich persönlich kann deine schlechten Erfahrungen auch nicht teilen, habe selbst eigentlich nur gute gemacht

  Mit Zitat antworten Zitat
blablab

Registriert seit: 3. Jan 2006
509 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: Indy-Komponenten

  Alt 18. Mai 2007, 18:08
@CCRDude: Ich weiß net so genau welche Version das ist. Da sie beim Delphi dabei war und ich nicht extra Indy 10 installiert habe behaupte ich mal dass ich mich auf Indy 9 beziehe.

Zitat von Udontknow:
Wie sollte Indy denn deiner Meinung nach das beim Client realisieren? Soll bei jedem eintreffenden Byte ein Ereignis getriggert werden?
Ich versteh nicht ganz wieso ich bei jedem Byte n Ereignis bekommen sollte... Das ist doch beim Server au net so. Ich hätte es gerne so realisiert wie auch beim Server.
Oder findest du es etwa gut, jedesmal noch eine extra Anti-Freeze-Komponente zu benutzen?
Und ich glaub, wenn mans beim Server au selber triggern müsste, wärs mir auch relativ egal. Es sollte halt zumindest einheitlich sein und wenn möglich ohne zusätzliche Anti-Freeze-Komponente funktionieren.

@Meflin:
Da hast du natürlich recht, das Preis-Leistungs-Verhältnis ist natürlich perfekt!
Ich hab mich nur gewundert, dass ich bei den Indy-Komponenten auf so viele unschönheiten gestoßen bin, wo das bei den anderen Komponenten nirgens so ist.
Deshalb dachte ich mir, ich frag mal nach eurer Meinung...
  Mit Zitat antworten Zitat
Udontknow

Registriert seit: 17. Jun 2002
223 Beiträge
 
#7

Re: Indy-Komponenten

  Alt 18. Mai 2007, 18:12
Zitat von blablab:
Zitat von Udontknow:
Wie sollte Indy denn deiner Meinung nach das beim Client realisieren? Soll bei jedem eintreffenden Byte ein Ereignis getriggert werden?
Ich versteh nicht ganz wieso ich bei jedem Byte n Ereignis bekommen sollte... Das ist doch beim Server au net so. Ich hätte es gerne so realisiert wie auch beim Server.
Oder findest du es etwa gut, jedesmal noch eine extra Anti-Freeze-Komponente zu benutzen?
Ich hab´s bereits geschrieben: Der Server hat eben KEIN Ereignis für Datenempfang! Und genauso ist es ja auch mit dem Client.
Die Execute-Routine ist nur die Hauptsteuerungsroutine für den Thread, der für die TCP-Verbindung zuständig ist. Es wird durch den Verbindungsaufbau ausgelöst, und nicht durch Datenempfang!
Wie gesagt, ich lagere die clientseitigen Empfangsroutinen in einen separaten Thread aus und brauche deshalb auch nicht AntiFreeze.

Cu,
Udontknow
  Mit Zitat antworten Zitat
blablab

Registriert seit: 3. Jan 2006
509 Beiträge
 
Delphi 7 Enterprise
 
#8

Re: Indy-Komponenten

  Alt 18. Mai 2007, 20:31
Ob ich jetzt n ereignis bekomm wenn er ne verbindung macht oder was auch immer, auf jeden Fall bekomm ich beim Server n Ereignis, wenn ich daten bekomme und beim Client nicht... Und meiner Meinung nach sollte das entwedr bei beiden gehn oder bei keinem. Wobei das ja nur ein Problem ist, das mich stört.
Dann interpretier ich das mal so, dass du mit den Indy-Komponenten vollkommen zufrieden bist und dir bis jetzt auch noch keine Unschönheiten aufgefallen sind, die dich stören.

Vielleicht bin ich ja auch wirklich der einzigste hier, der was gegen solche Dinge wie AntiFreeze-Komponenten hat und den es nervt, wenn man eine Komponente ins Formular tut und gleichzeitig die exe um 100kb größer wird und man 3-4 neue namen in der uses-klausel stehen hat...
  Mit Zitat antworten Zitat
Benutzerbild von Meflin
Meflin

Registriert seit: 21. Aug 2003
4.856 Beiträge
 
#9

Re: Indy-Komponenten

  Alt 18. Mai 2007, 22:28
Zitat von blablab:
gleichzeitig die exe um 100kb größer wird
Wen stört das? Traffic ist billig...
Zitat:
und man 3-4 neue namen in der uses-klausel stehen hat...
Wenn dich DAS stört, dann öffne die Indy-Units (Source ist ja dabei) und kopiere den Quelltext in deine Haupt-Unit

  Mit Zitat antworten Zitat
blablab

Registriert seit: 3. Jan 2006
509 Beiträge
 
Delphi 7 Enterprise
 
#10

Re: Indy-Komponenten

  Alt 19. Mai 2007, 12:41
@Meflin:
Ne, eigentlich störn mich die 100KB, die wahrscheinlich net alle notwendig sind und wegen den vielen Dateien in der Uses-Klausel zustandekommen. Und ich frag mich auch, wie die 100KB zustandekommen nur zb für nen TCP-Server...

Aber probiers mal aus den Code in dein Projekt zu kopiern. Das wird schwierig, derade deswegen, weil du die vielen Dateien in der Uses-Klausel hast und die einzelnen Dateien wieder viel in der Uses-Klausel stehn haben...
Ich wär sogar interessiert an einem solchen Programm bei dem der Quelltext eines idHttp bzw idTCPServer kopiert ist. Ich wollte nämlich mal mit dem Debugger gucken, wieso er fürn Get() mal 5s und mal 20s TimeOut braucht. Aber leider funktioniert der Debugger in den TCP-Komponenten net...
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 16:12 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz