Announcement

Collapse
No announcement yet.

NodeJS, SSE & PHP-XAMPP

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • NodeJS, SSE & PHP-XAMPP

    Hallo alle zusammen,

    ich habe einen XAMPP Webserver (inkl. PHP, MySQL) lokal auf meinen PC. Mein Vorhaben beeinhaltet den Aktualisierungsvorgang der Daten eines Webserver-Benutzers, der über Server-Sent Events des NodeJS Servers erfolgt. Ich verstehe jedoch nicht wie das PHP-Script über den NodeJS Server aufgerufen bzw. verwendet wird. Zuvor habe ich es über Ajax-Posts durchgeführt ohne NodeJS Server. Der Webserver läuft nur im lokalen Netzwerk. Zu erwähnen ist, dass Hostnamen wie localhost oder 127.0.0.1 mittels .htaccess zu drake-pc weitergeleitet werden. HTTP-Anfragen werden ebenfalls auf HTTPS umgeleitet. Auf stackoverflow habe ich zwei verschiedene Posts gelesen. Einerseits kann NodeJS nur mittels Überbrückung durch Curl, was mir neu ist, PHP ausführen. Andererseits muss sowohl auf dem NodeJS Server credentials als auch auf dem Client aktiviert sein, da ich zwei verschiedene Quellen (XAMPP-Server & NodeJS Server) verwende?

    Momentan erhalte ich die Fehler:
    Quellübergreifende (Cross-Origin) Anfrage blockiert: Die Gleiche-Quelle-Regel verbietet das Lesen der externen Ressource auf [url]. (Grund: CORS-Kopfzeile Access-Control-Allow-Origin fehlt). Statuscode: 200.
    Firefox kann keine Verbindung zu dem Server unter https://drake-pc:3002/path/to/cellData.php aufbauen.

    Mein bisheriger Ansatz (Dateien):

    server.js
    Code:
    const express = require('express');
    const bodyParser = require('body-parser');
    const https = require('https');
    const fs = require('fs');
    const hostname = 'drake-pc';
    const port = 3002;
    
    var privateKey = fs.readFileSync("./cert.key");
    var certificate = fs.readFileSync("./cert.crt");
    
    const app = express();
    
    app.use(bodyParser.json());
    app.use(bodyParser.urlencoded({extended: false}));
    
    var interval;
    
    //handles the GET requests sent from client
    //setInterval(function, milliseconds) calls the function in intervals specified with milliseconds
    app.get("/path/to/cellData.php", function(request, response) {
       response.writeHead(200, {'Content-Type': 'text/event-stream','Connection': 'keep-alive', 'Cache-Control': 'no-cache', 'Access-Control-Allow-Origin': '*'});
       interval = setInterval(updateCellData, 2000, request.params, response);
    });
    
    let terminated = false;
    
    //updates cell data
    //data is sent to the client
    //if terminated is true, sent the message and close the stream
    function updateCellData(params, response) {
       // cellData.php
    
       if(terminated) {    // no determination yet
           clearInterval(interval);    // stop updating
           response.write("Closing the stream with the client.")
           response.end();
       }
       else {
           response.write(JSON.stringify(response));    // setze Array von cellData.php als Ausgabe?
       }
    }
    
    const server = https.createServer({
        key: privateKey,
        cert: certificate
    }, app).listen(port, hostname, () => {
      console.log(`Server running at https://${hostname}:${port}/`);
    });

    client.js
    Code:
    const dacells = null;
    //create new EventSource object used to receive events sent from server
    //parameter is URL of the web page that sends responses
    const eventListener = new EventSource("https://drake-pc:3002/path/to/cellData.php");
    
    //create event listener that will listen for onmessage events
    //onmessage event occurs when a message is sent from server
    //in function body specify what to do with the response: update cell data
    eventListener.onmessage =
        (event) => {
        dacells = newCellData; // Daten-Array aktualisieren
    }
    Info: Der Code von client.js wird nicht auf der Hauptseite index.php, sondern sobald der Benutzer sich eingeloggt hat und mittels POST-Methode sich auf einer bestimmter "Seite" befindet, ausgeführt.


    cellData.php
    Code:
    <?PHP
    include_once(..'/includes.php');    
    dbconnect();
    
    function get_radar_cell($clientData) {
        $clientArray = array("erfolgreich"=>true)
        $clientData['used'] = true;
        return json_encode($clientData);
    }
    echo get_radar_cell($_GET['client'] ?? array());
    
    dbclose();
    ?>
    Zusatz: Sobald ich http verwende, erhalte ich den Fehler: Laden von gemischten aktiven Inhalten https://drake-pc:3002/path/to/cellData.php wurden blockiert

    Ich hoffe mir kann jemand weiterhelfen, danke im Voraus!
    Zuletzt editiert von Atsutake; 09.08.2022, 06:04.
Working...
X