phpbar.de logo

Mailinglisten-Archive

[php] UDP vs. TCP

[php] UDP vs. TCP

Johannes Schlueter php_(at)_phpcenter.de
Mon, 07 Oct 2002 17:15:45 +0200


Hi Norbert,

On 7 Oct 2002 at 11:50, Norbert Pfeiffer wrote:

> Nun muessten die PHP-Developer, das nur noch auslesen und
> als Rueckgabe fuer die Function mail(); von PHP verwenden.
> Diese gibt naemlich keinerlei Informationen her ... :-(

Ja, die einzige Info die man von TCP bekommen könnte ist, dass
die Übertragung vom script auf den entfernten MTA erfolgreich
war, aber nicht, ob er die Mail so akzeptiert und ob er die
überhaupt zustellen konnte. Letzteres Ergebnis zu bekommen
wäre wohl das intereanteste aber das wirst Du in 90% der
Fälle auf keine Weise bekommen können (außer durch eine
Antwortmail oder so) das führt dazu, dass ein reines true/false
das von mail() zurückgeliefert werden könnte irreführend ist
also ist da nichts implementiert (zudem nutzt die mail() auf
den meisten Systemen einen lokalen MTA (z.B. sendmail) wo ein
Fehler als fatal error gehandelt wird und sich ein gemeinsamer
Handler schwer tun würde. Würde man das mit UDP lösen fängt es
damit an (ohje, jetzt gleite ich wirklich weit von PHP ab *g*),
dass der SMTP-Cleint sich ja zunächst mit einem HELO am SMTP-
Server anmeldet, dann ihm sagt das jetzt eine neue Mail kommt
und dann die Daten am Schluss ein Punkt in einer eigenen Zeile.
Nach jedem dieser Schritte meldet der Server einen Erfolg. Eines
der Probleme bei der UDP wäre die Zuordnung wenn da jetzt zwei
Übertragungen parallel ablaufen. Dann müsstest Du jedem Paket
eine Unique-ID mitgeben und jeder cleint und Server müssten
jeweils pro IP ein gemiensamen Speicher haben auf den alle
threads zugriefen können, damit der Empfangende Thread die an
den verarbeitenden Thread weiterleiten kann. Zudem muss selbst
implementiert werden was passiert wenn eines der Pakete verloren
geht (was im Internet, noch häufiger als bei der Post, durchaus
mal passiert...) Wenn das z.B. nach der Autentifizierung passiert
wartet der Server bis zum Timeout auf eine Nachricht und der client
wartet bis zum Timeout auf eine Rückmeldung. In TCP ist das recht
elegant gelöst zudem ist die zusätzliche Belatung nicht erheblich
größer als die Zeit, die zum Übertragen der "Nutzdaten" nötig ist.
Für weitere Details empfehle ich aber dann doch die entsprechende
Fachliteratur oder deinen lokalen Netzwerk Guru :)

johannes


php::bar PHP Wiki   -   Listenarchive