Einzelnen Beitrag anzeigen

skyphab

Registriert seit: 16. Apr 2004
17 Beiträge
 
Delphi 7 Enterprise
 
#1

offene tcp/ip verbindungen 'wartend'

  Alt 16. Apr 2004, 10:26
hallo zusammen!

tolles forum habt ihr hier!
ich habe schon einiges konkretes durch suchen gefunden, aber jetzt muss ich doch mal zwei fragen stellen, an leute mit mehr erfahrung. ich hoffe jemand macht sich die mühe und liest das hier durch

ich schreibe gerade ein programm, dass unter anderem kommunikation mit tcp/ip enthalten sollte. der sinn ist der, dass maschinendaten von einem rechner gesammelt und an mehrere rechner verteilt werden: ein rechner sammelt und gibt an 8 weitere rechner weiter.

die kommunikation will ich mit den 'normalen' tserversocket- und tclientsocket-komponenten von delphi realisiern, was soweit auch gut klappt. wichtig ist in jedem fall, dass die daten ankommen falls eine physikalische verbindung besteht (die eigentlich immer bestehen sollte).

jetzt könnte man das ja auf zwei unterschiedliche arten lösen: einen server, der die maschinendaten empfängt und 8 clients, die sich am server anmelden. der server schickt dann bei stehender verbindung die daten an die clients. das scheint mir recht sauber zu sein, nur falls sich der client nicht am server angemeldet hat, bekommt er keine daten, das stört mich etwas.

andere möglichkeit wäre eine serverkomponente auf den unterschiedlichen rechnern (insgesamt 8 ) und 8 clients (auf einem rechner). das handling ist das etwas unkonfortabler, aber ich könnte explizit verbindungen aufbauen falls sie nicht bestehen und daten vorliegen.

die erste frage: welche version würdet ihr vorziehen? ich habe noch keine erfahrung mit den tcp/ip komponenten

dann noch die zweite frage:
ich könnte die verbindung jeweils aufbauen und stehen lassen. dann hätte ich 8 offene verbindungen, was eine saubere sache wäre. allerdings muss ich mich dann darum kümmern, dass die verbindung auch wirklich steht und ggf. überprüfen ob sie das tut.

was mir besser gefällt ist die methode, die verbindung aufzubauen (client.open) und dann bei onconnect die daten zu schicken und wieder abzubauen (so wie ich's hier im forum gesehen habe). das hat allerdings zur folge, dass ich viele offene verbindungen habe. wenn ich mir netstat anschaue, wird die verbindung nicht synchron wieder abgebaut, sondern bleibt noch eine gewisse zeit bestehen ('wartend'). wenn ich mehrmals pro sekunde daten sende, habe ich so ca. 100 verbindungen offen und das nur für einen rechner. mal 8 wären das um die 800 verbindungen, die zwar geschlossen sind, aber laut netstat den status 'wartend' haben.

ich würde es gerne so machen, aber ist das problematisch? ich habe wie gesagt keine erfahrung damit, nicht dass mir irgendwann das programm zu läuft. es wäre so aber sehr praktisch, weil ich mich nicht um bestehende verbindungen kümmern muss, die evtl. irgendwann abbrechen sondern die verbindung jedesmal neu aufbaue.

habt ihr tipps?
  Mit Zitat antworten Zitat