Utilizzando una richiesta Ajax
Python
@app.route('/_stuff', methods= ['GET'])
def stuff():
cpu=round(getCpuLoad())
ram=round(getVmem())
disk=round(getDisk())
return jsonify(cpu=cpu, ram=ram, disk=disk)
Javascript
function update_values() {
$SCRIPT_ROOT = {{ request.script_root|tojson|safe }};
$.getJSON($SCRIPT_ROOT+"/_stuff",
function(data) {
$("#cpuload").text(data.cpu+" %")
$("#ram").text(data.ram+" %")
$("#disk").text(data.disk+" %")
});
}
Utilizzando WebSockets
project/app/views/request/websockets.py
# -*- coding: utf-8 -*-
# OS Imports
import json
# Local Imports
from app import sockets
from app.functions import get_cpu_load, get_disk_usage, get_vmem
@sockets.route('/_socket_system')
def socket_system(ws):
"""
Returns the system informations, JSON Format
CPU, RAM, and Disk Usage
"""
while True:
message = ws.receive()
if message == "update":
cpu = round(get_cpu_load())
ram = round(get_vmem())
disk = round(get_disk_usage())
ws.send(json.dumps(dict(received=message, cpu=cpu, ram=ram, disk=disk)))
else:
ws.send(json.dumps(dict(received=message)))
project/app/__init__.py
# -*- coding: utf-8 -*-
from flask import Flask
from flask_sockets import Sockets
app = Flask(__name__)
sockets = Sockets(app)
app.config.from_object('config')
from app import views
Utilizzando Flask-WebSockets ha reso la mia vita molto più facile. Ecco il programma di avvio: launchwithsockets.sh
#!/bin/sh
gunicorn -k flask_sockets.worker app:app
Infine, ecco il codice del client:
custom.js
The code is a bit too long, so here it is.
Si noti che non sto usando cose come socket.io, è per questo che il codice è lungo. Questo codice tenta inoltre di riconnettersi periodicamente al server e può interrompere il tentativo di riconnettersi su un'azione dell'utente. Io uso la lib Messenger per avvisare l'utente che qualcosa è andato storto. Ovviamente è un po 'più complicato dell'uso di socket.io ma mi è piaciuto molto codificare il lato client.
non ricaricare la pagina significa che devi eseguire codice dal client, il che significa che ** devi ** usare javascript. Inoltre, quando dici che uso della CPU intendi il tuo server? –
Sì, devi usare JavaScript per fare una query al server per ottenere un aggiornamento sull'utilizzo della CPU. Non è possibile farlo interamente dal lato server. – aychedee
Se si è stabilita una connessione web socket, il server potrebbe inviare aggiornamenti al client. Ma si dovrebbe comunque utilizzare JS per creare la connessione e gestire gli aggiornamenti dal server. – aychedee