Thread Bester Weg zum Streaming (23 answers)
Opened by bianca at 2017-06-18 16:17

haj
 2021-12-15 15:20
#194093 #194093
User since
2015-01-07
527 Artikel
BenutzerIn

user image
Beim Upload ist die Geschichte kompliziert, oder besser gesagt: Noch etwas komplizierter. Das liegt aber an Dingen, die Du bisher vielleicht noch gar nicht berücksichtigt hast.

Technisch gesehen bietet nämlich HTTP zwar beim Download die Möglichkeit an, große Dateien "teilweise" runterzuladen: Damit schaffen es die Browser, wenn der Server mitspielt, einen abgebrochenen Download wiederaufzusetzen, ohne nochmal das gesamte Teil herunterzuladen. Eine CGI-Anwendung in Perl muss das allerdings erst mal unterstützen (sprich: den Range-Header auswerten).

Das HTTP-Protokoll bietet aber keinerlei Hilfe für das Hochladen großer Dokumente an: Aus Sicht des Protokolls ist das "alles oder nichts".

Für das Hochladen im Browser gibt es daher auch keine eingebaute Alternative zum File-Upload: Da muss man sich drauf verlassen, dass der Browser das hinkriegt (weil Du von <form ...> sprichst, rate ich, dass der Client nicht in Perl geschrieben ist).

Auf Serverseite kann man mit CGI schon etwas machen: CGI schreibt einen Upload in eine temporäre Datei und pumpt sich dabei nicht das ganze in den Speicher. Du kannst dich in CGI sogar mit einem "Upload hook" reinhängen, wenn Du statt dessen etwas anderes machen willst.

Ansonsten können Dir bei solchen Monster-Uploads diverse Timeouts in die Quere kommen. Apache hat eine TimeOut-Einstellung (Voreinstellung: 60 Sekunden), nach der der Server einen Request abwürgt. Das kann man hochsetzen, was allerdings die Wartezeit verlängert, wenn sich wirklich mal ein Programm aufhängt. Alternativ kann man den Apache bechäftigen, in dem man mindestens einmal pro Minute "ein bisschen" Response ausgibt - aber das ist schon etwas frickelig.

Wir hatten dieses Problem mal im Job mit einem digitalen Dokumentenarchiv, wo die Leute auch große Dokumente wie ein 8GB ISO-Image einer DVD archivieren wollten. Mit HTTP war das nicht zu machen, weil zu oft eine der Netzwerk-Komponenten mit Timeout "ausgestiegen" ist. Wir haben das dadurch gelöst, dass der eigentliche Upload über FTP erfolgt, aber das war schon recht aufwendig.

In einer überschaubaren Umgebung wären auch SCP oder rsync brauchbare Alternativen. Mit "überschaubar" meine ich, dass das Verteilen und Pflegen der SSH-Keys noch zu schaffen sein muss.

View full thread Bester Weg zum Streaming