Domanda

My Ancora da rilasciare Delphi 2010 Application Consente agli utenti di caricare i loro file ai miei server. In questo momento sto usando il post https per inviare i file, l'algoritmo (semplificato) è fondamentalmente:

    .
  1. file diviso in "fette" (256kb ciascuna)
  2. Per ogni fetta, pubblicarlo su server

    cioè. Per un file da 1 MB:

    --> Get Slice #1 (256KB)
    --> Upload Slice #1 using TidHTTP.Post()
    
    --> Get Slice #2 (256KB)
    --> Upload Slice #2 using TidHTTP.Post()
    
    --> Get Slice #3 (256KB)
    --> Upload Slice #3 using TidHTTP.Post()
    
    --> Get Slice #4 (256KB)
    --> Upload Slice #4 using TidHTTP.Post()
    
    .

    Sto usando Indy 10 . Io (AB) ha usato il mio profiler oltre e ancora e non ci sono molto rimasti per ottimizzare se non cambiare la routine di caricamento stesso.

    Sto anche usando Multi-Threading , e anche se ho fatto del mio meglio per ottimizzare il mio codice, i miei benchmark mi dicono ancora che posso fare meglio (ci sono altri software ben ottimizzati che ottengono A Molto Meglio Tempi ... quasi due volte più veloce della mia routine di caricamento!)

    So che non è l'errore del mio server ... Ecco le idee che ho ancora bisogno di esplorare:

      .
    1. Ho provato a raggruppare fette in un singolo post, naturalmente questo ha portato a un aumento delle prestazioni (20-35%) ma riprendendo la capacità è ora ridotta.

    2. Ho anche pensato di usare SFTP / SSH, ma non sono sicuro se è veloce.

    3. Utilizzare i socket web per implementare il caricamento rivenuto (come questo componente ), non ne sono sicuro Velocità.

      Ora la mia domanda è: c'è qualcosa che posso fare per accelerare il mio caricamento? Sono aperto a qualsiasi suggerimento che posso implementare, inclusi gli strumenti di comando (se la licenza mi consente di spedirlo con la mia applicazione), a condizione che:

        .
      1. Carica riassuntivo è supportato
      2. veloce!
      3. Uso ragionevole della memoria
      4. Secure e consentire l'autenticazione del login / utente

        Inoltre, a causa delle principali preoccupazioni di sicurezza, FTP è non qualcosa che vorrei implementare.

        Grazie mille!

È stato utile?

Soluzione

Suggerirei di fare un singolo TIdHTTP.Post() per l'intero file senza limitarelo affatto.È possibile utilizzare gli eventi TIdHTTP.OnWork... per tenere traccia di quanti byte sono stati inviati al server in modo da sapere dove riprendere da quando è necessario.Quando riprende, è possibile utilizzare la proprietà TIdHTTP.Request.CustomHeaders per includere un'intestazione personalizzata che indica al server in cui si riprende, in modo da riportare il file precedente all'offset specificato prima di accettare i nuovi dati.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top