Heim >Backend-Entwicklung >PHP-Tutorial >[nginx] Ob der Download der Statistikdatei abgeschlossen ist (flask)

[nginx] Ob der Download der Statistikdatei abgeschlossen ist (flask)

WBOY
WBOYOriginal
2016-08-08 09:28:191132Durchsuche

Es muss gezählt werden, ob die Datei vollständig vom Benutzer heruntergeladen wurde. Da es sich um eine Webanwendung handelt, wurde mit js keine Implementierungslösung gefunden, daher habe ich nach der Implementierungslösung von Nginx gesucht und zeichnete den einfachen Erkundungsprozess auf.

Experiment 1

  • Die originellste Idee ist, das Protokoll zu überprüfen. Nach dem Herunterladen einer Datei prüfen wir, ob die Dateigröße der Protokollübertragung mit dem Original übereinstimmt Größe der Datei
  • Testen Sie die Größe der herunterzuladenden Datei

  • Das Protokoll eines vollständigen Downloads kann mit verglichen werden das Protokoll eines unvollständigen Downloads. Gemessen an der Größe des Abschnitts

Diese Methode besteht darin, Statistiken basierend auf dem Protokoll zu erstellen und das Protokoll jedes Mal zu analysieren Es dauert eine Weile, bis die Ergebnisse vorliegen, was etwas mühsam und nicht zeitgemäß ist.

Experiment 2:

Relevante Blogs finden

  • 100 abgeschlossene Downloads zählen
    Verwenden Sie post_action (die unten verwendete Methode)

  • Nginx-post-action-to-trigger-successfully-download-file Es sind Probleme beim Herunterladen von nginx-post-action-proxy-pass-track aufgetreten -file

  • Use x-accel-redirect

    • nginx-x-accel-redirect-php-rails English
    • Utilize The x -accel-redirect-Header von Nginx implementiert die Download-Steuerung auf Chinesisch

Der ungefähre Prozess:

Die Hauptarbeit ist 2
1 Ändern Sie die Konfiguration von Nginx und leiten Sie die heruntergeladenen Dateiinformationen an den Statistikdienst oder die URL
weiter 2 Statistischer Dienst zeichnet den Datei-Download-Status auf und bestimmt

Der entscheidende Punkt hier ist die Verwendung des post_action-Parameters von nginx. Nachdem die Download-Anfrage abgeschlossen ist, wird der Download-Status an einen anderen statistischen Dienst gesendet und der statistische Dienst bestimmt den Datei-Download-Status.

Die Konfiguration ähnelt

<code>location / {
    limit_rate 20k;
    post_action @afterdownload;
}

location @afterdownload {
    proxy_pass http://127.0.0.1:8888/counting?FileName=$uri&ClientIP=$remote_addr&body_bytes_sent=$body_bytes_sent&status=$request_completion;
    internal;
}
</code>

und schreibt dann eine Flasche, um Statistikanfragen zu empfangen

<code><span>#!/usr/bin/python</span><span>#-*- coding:utf-8 -*-</span><span>############################</span><span>#File Name: counting_file.py</span><span>#Author: orangleliu</span><span>#Mail: orangleliu@gmail.com</span><span>#Created Time: 2015-03-11 16:41:05</span><span>#License: MIT</span><span>############################</span><span>'''
    nginx统计用户下载文件字节

    '''</span><span>from</span> flask <span>import</span> Flask, request
    app = Flask(__name__)

    <span>@app.route("/counting")</span><span><span>def</span><span>counting</span><span>()</span>:</span>
        req = request.args.get(<span>"FileName"</span>)
        clientip = request.args.get(<span>"ClientIP"</span>)
        size = request.args.get(<span>"body_bytes_sent"</span>)
        status = request.args.get(<span>"status"</span>)
        <span>print</span><span>"request  "</span>, req
        <span>print</span><span>"ip  "</span>, clientip
        <span>print</span><span>"size  "</span>, size
        <span>print</span><span>"status  "</span>, status
        <span>return</span><span>"ok"</span><span>if</span> __name__ == <span>"__main__"</span>:
        app.run(port=<span>8888</span>, debug=<span>True</span>)</code>

Zugriffsprotokolle

<code>lzz@ubuntu:code$ python counting_file.py
 * Running on http://127.0.0.1:8888/
 * Restarting with reloader
request   /index.html
ip   10.0.1.16
size   0
status   OK
127.0.0.1 - - [12/Mar/2015 10:42:59] "GET /counting?FileName=/index.html&ClientIP=10.0.1.16&body_bytes_sent=0&status=OK HTTP/1.0" 200 -
request   /Pillow-2.3.0.zip
ip   10.0.1.16
size   225280
status
127.0.0.1 - - [12/Mar/2015 10:43:14] "GET /counting?FileName=/Pillow-2.3.0.zip&ClientIP=10.0.1.16&body_bytes_sent=225280&status= HTTP/1.0" 200 -
</code>

Solange es sich im Flask befindet. Nach der Verarbeitung können Sie die Downloads der Benutzer zählen.
Im obigen Artikel wurde auch erwähnt, dass es bei der Verwendung mehrerer Verbindungen zum Herunterladen zu Problemen kommen kann und die Ergebnisse ungenau sind, sodass noch viel Raum für Verbesserungen besteht

Aussage:
Dieser Artikel stammt aus dem Blog „orangleliu Notebook“. Bitte bewahren Sie diese Quelle zum Nachdruck auf: http://blog.csdn.net/orangleliu/article/details/44219213
Der Autor orangleliu übernimmt die Attribution-NonCommercial-ShareAlike-Lizenz

Das Obige stellt die vollständige Idee des Herunterladens von [nginx]-Statistikdateien (Flask) vor, einschließlich des Inhalts. Ich hoffe, dass es für Freunde hilfreich ist, die sich für PHP-Tutorials interessieren.

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn