Quindi, diciamo che sto scrivendo un server web e voglio supportare caricamenti di file "molto grandi". Supponiamo inoltre che intendo farlo tramite il tipo MIME standard multipart/form-data. Devo dire che sto usando erlang e che ho intenzione di raccogliere pacchetti http dal momento che vengono restituiti da erlang:decode_packet/2
, ma non voglio effettivamente raccogliere il corpo della richiesta finché il gestore della richiesta http non ha trovato posto per il contenuto caricato. DovreiCome faccio a gestire upload di file molto grandi in un server Web Erlang?
a) andare avanti e ritirare il corpo comunque, ignorando la possibilità che sia molto grande e che quindi possa bloccare il server a causa della sua esaurita memoria?
b) astenersi dal ricevere sul socket qualsiasi (possibilmente inesistente) corpo di richiesta fino a dopo che le intestazioni sono state elaborate?
c) fare qualcos'altro?
Un esempio per la risposta c potrebbe essere: generare un altro processo per raccogliere e scrivere il contenuto caricato in una posizione temporanea (al fine di ridurre al minimo l'utilizzo della memoria), assegnando contemporaneamente tale posizione al gestore della richiesta http per l'elaborazione futura. Ma proprio non lo so - c'è una tecnica standard qui?
Bene, il consenso sembra essere che il modo standard è quello di fare ciò che ho suggerito per l'opzione c. Tuttavia, sento che ci deve essere un modo migliore - sono infastidito dall'imbarazzo dei file temporanei - richiedono ulteriori porte di erlang da aprire (più di una volta se ho intenzione di leggere il file di nuovo in qualche punto), e dividono tra due o più processi quello che vorrei essere trattato da uno. Questo è, tuttavia, quello che avevo in programma di fare - ho saltato che qualcuno potesse fare le cose in un modo diverso. – Aoriste
È necessario memorizzare i dati. In pratica questo viene fatto in memoria, o su un dispositivo di memorizzazione. La tua domanda dice che la memoria non è un'opzione; il tuo commento dice che non ti piace archiviarlo su un dispositivo. L'unica opzione rimanente è l'occultismo ... – Zed