Datenübertragung über TCP oder UDP

doxon

Mitglied
Mitglied seit
11 Jun 2006
Beiträge
781
Punkte für Reaktionen
0
Punkte
0
Hallo,
ich muss mit Hilfe eines Scriptes (PERL, PHP, ...) 2 Zeilen (eigendlich nur 2 Werte) per TCP oder UDP an einen anderen Rechner im lokalen Netzwerk übertragen.

Die Verbindung muss relativ schnell ablaufen.
Ich habe schon versucht, einen Befehl per SSH auszuführen und die Befehlsausgabe dann verarbeitet. (in einem PHP-Script) Jedoch werden so 7 Server nacheinenader abgefragt von denen ein paar auch im Ausland stehen. So kam es ingesamt zu einer Laufzeit von ca 10-20sec.

Es geht um die Anzahl der Active Channels und Active Calls des Asterisk.
Diese sollen von jedem Server an einenen zentralen Server gesendet und dort dann in eine MySQL Datenbank eingtragen werden.

Es sollte auch möglich sein das das Script mehrere Verbindungen behandeln kann, denn wenn sich jeder Server jede Sekunde meldet kommt es sonst schnell zu Komplikationen.

Ich hoffe mir kann da jemand mit 2 kleinen Scripten aushelfen (Sender und Empfänger)

Ich glaube als Empfängerscript würde sich PHP anbieten, da es am besten mit MySQL-Tabellen umgehen kann, oder?


Vielen Dank
und freundliche Grüße,

Sven.
 
...uh ah.. bei mir antwortet auch keiner, dann suche ich mir mal Anfragen ohne Antwort, und schaue, was ich tun kann -
Ansatz: möglichst fertige/vorhandene Komponenten benutzen?
- kann/läuft auf dem Master/Ziel ein Web-Server...?

...wie wäre es mit:

1.Ansatz:
-lynx auf die Clients
-Script auf den Clients welches per cron die Parameter holt und einen
URL-Request erzeugt und an den Zielserver schickt...

sowas wie
/usr/bin/lynx --dump "http://<zielserver>/.../datensammeln.php?daten=123456..." 2>&1


...das startet dann -automatisch- dieses phpscript auf dem zielserver
das Script verarbeitet dann die Daten...schreibt logs... u.s.w.
geht schnell, ist 'validiert' ...und läuft tausendfach... :)

äh und: auch wenn sich jeder Client jede Sekunde meldet... ist das auch kein Problem


2. Ansatz:

ist syslog-ng auf den Systemen?

dann kann man den Zielserver als LOG-Host der Clients definieren, die gewünschten Parameter in ein Logfile schieben und syslog-ng überträgt das ganze fertig an den Zielserver ...und der in ein Ziel-Log ....
das kann man dann auswerten -

...vielfach bewährt...
 
Zuletzt bearbeitet:
mit dem ersten ansatz kannst du auch mit SOAP arbeiten
 
sorry.. hab den thead ganz außer acht gelassen weil sich keiner drauf meldete.

Die Sache hat sich schon erledigt und das Projekt läuft.

Kurzfassung:
sender-Script auf dem Client und ein empfänger-Script auf dem Server, datenübertragung per UDP (ein paar zeilen PERL Code). Das ganze wird dann direkt vom Perl-Script in eine mySQL Datenbank geschreiben und im 2. Schritt mit einer PHP-Seite grafisch aufbereitet.
 
Auch wenn es schon zu spät ist.

Kann es sein, dass die Zeiten aufgrund von DNS so hoch sind?
Wenn nein --> schlechte Anbindung!

Und dann ist erst Recht UDP ein Problem wenn keine Pakete verloren gehen können.

WENN es sich wirklich nur um kleine EINZELNE werte handelt, würde ich UDP nehmen und folgendes machen: In einer Schleife die Packerl mit einer Sequenznummer und Checksumme raussenden und dann nach jedem Durchgang kurz auf Bestätigung warten. So kannst du parallel alles "schnell" raussenden und wirst vom TCP Overhead nicht blockiert (Obwohl das mit TCP aufgrund von Buffern sowieso möglich ist).

Auf alle Fälle schätze ich den Vorteil von UDP gegenüber TCP als sehr gering ein, denn bei UDP musst ja trotzdem selbst sicherstellen, dass die Pakete angekommen sind (ACK).
 
divB schrieb:
Auch wenn es schon zu spät ist.
Kann es sein, dass die Zeiten aufgrund von DNS so hoch sind?
Wenn nein --> schlechte Anbindung!
Ich denke das der SSH-Overhead (Login, Authentifizierung, Lookup, etc.) die geschwindigkeit gedrückt hat.

divB schrieb:
Und dann ist erst Recht UDP ein Problem wenn keine Pakete verloren gehen können.
Also das Script läuft nun schon mehre Wochen recht reibungslos.

divB schrieb:
WENN es sich wirklich nur um kleine EINZELNE werte handelt, würde ich UDP nehmen und folgendes machen: In einer Schleife die Packerl mit einer Sequenznummer und Checksumme raussenden und dann nach jedem Durchgang kurz auf Bestätigung warten. So kannst du parallel alles "schnell" raussenden und wirst vom TCP Overhead nicht blockiert (Obwohl das mit TCP aufgrund von Buffern sowieso möglich ist).
Ist unsinnig, da der wert jede sekunde rausgesendet wird.
Bevor das Script erkennt das der eine wert nich angekommen ist, ist der nächste schon längst auf dem weg. Nebenbei währe es auch nicht allzuschlimm wenn mal von einem Server 2-3 Sec keine werte kommen.
 
Sag' gleich dassd ssh verwendet hast ;-) Oder hab ichs ueberlesen...

Dann ists klar, erst Recht wenn du ssh2 verwendest! Das liegt aber nicht am Netz sondern an der Key-Generierung bei jedem Verbindungsaufbau!

Wie gesagt, bei heutigen Verbindungen sollte das bei kleineren Datenmengen (wie diesen) nicht das Thema sein ob TCP oder UDP, aber so wie es du beschreibst waere natuerlich wirklich UDP das Optimum :)
 

Zurzeit aktive Besucher

Statistik des Forums

Themen
244,831
Beiträge
2,219,105
Mitglieder
371,533
Neuestes Mitglied
ipeee
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.