Visualizzazione dei risultati da 1 a 6 su 6

Discussione: Socket permanenti PHP

  1. #1

    Socket permanenti PHP

    Salve a tutti ragazzi, ho il seguente problema, sto creando una pagina web php, che si connette inizialmente ad un servizio fatto da me in python, tramite socket, ho pensato bene quindi di utilizzare una connessione permanente dato che dovrò "interrogare" molte volte questo servizio, quindi ho utilizzato la funzione pfsockopen che apre un socket permanente. Ma il problema è il seguente, il socket non è permanente, o meglio viene stabilita una connessione con il socket python, visibile con il comando netstat, ma non appena ricarico la pagina, la connesione cambia, il servizio riceve una nuova connesione, e lo stesso accade con il socket "permanente", che visibilemente con netstat, cambia porta di comunicazione, quindi ne crea uno nuovo, ciò che vi chiedo dunque è come posso sistemare tutto ciò, per renderlo effetivamente permanente? Vi lascio una stralcio di codice di test in php

    codice:
            error_reporting(E_ALL);
            ini_set('display_errors', 1);
    
            $fp = pfsockopen("127.0.0.1", 8000, $errno, $errstr, 30);
    //      stream_set_timeout($fp,1)
            if (!$fp) {
                    echo "ERROR: $errno - $errstr<br />\n";
            } else {
                    fwrite($fp, "");
                    echo fread($fp, 1024);
            //      fclose($fp);
            }
    ?>

  2. #2
    leggevo sul manuale di php che le funzioni p* vengono eseguite permanenti a livello di processo di apache. Poichè apache di default lancia più processi all'avvio per gestire le future richieste, quando il tuo script viene eseguito tu non puoi sapere in quale processo verrà eseguito, quindi può essere che mentre nel processo A la connessione è attiva, lo script venga richiamato nel processo B dove la connessione non esiste e allora pfsocketopen apre un nuovo socket permanente... etc etc etc

    ora, non sono sicuro al 100% che nel tuo caso sia quello il problema, dai commenti nel manuale php sembrerebbe una risposta plausibile. Prova a verificare che sia questa la problematica che stai riscontrando. Comunque visto che il socket è in localhost e visto l'utilizzo di php+apache, direi che potresti optare per una connessione non permanente e fare un test di carico per vedere quante richeiste riesce a soddisfare
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  3. #3
    Ciao grazie per la risposta, credo che sia come dici tu, perché ogni volta che viene eseguito lo script PHP viene aperto un nuovo socket, purtroppo non posso utilizzare un socket che si apre e si chiude continuamente, dato che la macchina linux su cui lo sto eseguendo tutto è Rasperry Pi, che non riesce a gestire molto carico. Ma esiste un modo per far si che non vengano creati nuovamente nuovi socket? Anche perché la funzione pfsockopen a questo punto sarebbe inutile, cioè non avrebbe senso mantenere un socket attivo, se poi posso leggere o scrivere solo una volta giusto?

  4. #4
    il problema è che stai utilizzando PHP e lo stai utilizzando dentro Apache, quindi hai molto poco supporto per quello che vuoi fare. una soluzione così su due piedi può essere la seguente:

    - crei un file "server.php" nel quale crei un socket server in ascolto su una porta locale da un lato, e dall'altra si collega al tuo rasperry, e attendi connessioni in ingresso.

    - lanci l'esecuzione di tale script fuori dal contesto apache facendolo girare in background nell'os

    - dallo script php dentro apache, ti connetti al socket server con un normale socket "a perdere".

    a questo punto dovresti poter ottenere una connessione fissa tra socket server php e rasperry, e tante usa e getta tra gli script nei processi di apache e il socket server.
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  5. #5
    magari questa può aiutare per le operazioni noiose: https://github.com/reactphp/socket
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  6. #6
    Ciao grazie di nuovo per la risposta, potrebbe essere una soluzione possibile, quella che mi hai proposto, ma volevo chiedere dato che ho un server Apache con Fastcgi, e da come ho letto su internet dovrebbe mantenere le connessioni permanenti, dato che con questo sistema Php è sempre in esecuzione

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.