.titleBar { margin-bottom: 5px!important; }

Datenübertragung über TCP oder UDP

Dieses Thema im Forum "Asterisk Skripte" wurde erstellt von doxon, 1 Feb. 2007.

  1. doxon

    doxon Mitglied

    Registriert seit:
    11 Juni 2006
    Beiträge:
    781
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Beruf:
    IT-Systemelektroniker
    Ort:
    Aurich
    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.
     
  2. McMops

    McMops Neuer User

    Registriert seit:
    21 Aug. 2006
    Beiträge:
    40
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    #2 McMops, 7 März 2007
    Zuletzt bearbeitet: 7 März 2007
    ...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

    ...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...
     
  3. chaos2000

    chaos2000 Aktives Mitglied

    Registriert seit:
    22 Aug. 2004
    Beiträge:
    2,028
    Zustimmungen:
    0
    Punkte für Erfolge:
    36
    Ort:
    LE
    mit dem ersten ansatz kannst du auch mit SOAP arbeiten
     
  4. doxon

    doxon Mitglied

    Registriert seit:
    11 Juni 2006
    Beiträge:
    781
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Beruf:
    IT-Systemelektroniker
    Ort:
    Aurich
    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.
     
  5. divB

    divB Mitglied

    Registriert seit:
    14 Juli 2006
    Beiträge:
    324
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    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).
     
  6. doxon

    doxon Mitglied

    Registriert seit:
    11 Juni 2006
    Beiträge:
    781
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Beruf:
    IT-Systemelektroniker
    Ort:
    Aurich
    Ich denke das der SSH-Overhead (Login, Authentifizierung, Lookup, etc.) die geschwindigkeit gedrückt hat.

    Also das Script läuft nun schon mehre Wochen recht reibungslos.

    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.
     
  7. divB

    divB Mitglied

    Registriert seit:
    14 Juli 2006
    Beiträge:
    324
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    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 :)