SSE Example with QtWebApp

provided by 樊龙涛
void streamcontroller::service(HttpRequest &request, HttpResponse &response)
{
    qDebug()<< "Http Server start" <<endl;
    QByteArray path = request.getPath();
    QHostAddress peer = request.getPeerAddress();

    if(path == "/data" && request.getMethod() == "GET")
    {
        response.setHeader("Content-Type","text/event-stream;charset=utf-8");
        response.setHeader("Cache-Control","no-cache");
        response.setHeader("Connection","keep-alive");
        response.setHeader("Access-Control-Allow-Origin","*");   // also important , if not set , the html application wont run.

         while(response.isConnected())
         {
             QThread::msleep(500);
             QJsonDocument tmp;
             QJsonObject data;

             data.insert("name","Adward");
             data.insert("age",QRandomGenerator::global()->bounded(100));
             data.insert("marriage",false);
             data.insert("Salary",QRandomGenerator::global()->bounded(20000.0));
             tmp.setObject(data);
             QByteArray jsondata = tmp.toJson(QJsonDocument::Compact);

             response.write("data:" + jsondata + "\n\n");
             response.flush();
         }
         qDebug()<< "End Transport"<< endl;
    }
    else 
    {
        response.setStatus(404, "Not found");
        response.write("The URL is wrong, no such document",true);

    }
}
HTML document code :
<!DOCTYPE html>
<html>
    <body>
    <h1>Getting server updates</h1>
    <div id="result"></div>

    <script>
        if(typeof(EventSource) !== "undefined") 
        {
          var source = new EventSource("http://192.168.0.24:8099/data");
          source.onmessage = function(event) 
          {
            document.getElementById("result").innerHTML += event.data + "<br>";
	        var jsondata = JSON.parse(event.data)
	        console.log(jsondata);
          };
        } 
        else 
        {
          document.getElementById("result").innerHTML = "Sorry, your browser does not support server-sent events...";
        }
    </script>
    
    </body>
</html>