Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
PHP - Sleep e Signals
Forum - PHP - Sleep e Signals

Avatar
nabbopazzo (Normal User)
Rookie


Messaggi: 34
Iscritto: 19/01/2009

Segnala al moderatore
Postato alle 15:20
Lunedì, 10/09/2012
Salve, vorrei realizzare in PHP 5 un sistema di notifica in tempo reale, per cercare di ottenere un servizio real-time che usasse poche risorse pensavo di tenere il client perennemente connesso ad una pagina tipo questa:
Codice sorgente - presumibilmente Plain Text

  1. <?php
  2. sleep(PHP_INT_MAX);
  3. echo 'notifica';
  4. ?>



e per interrompere lo sleep perenne, avrei inviato da un'altra pagina un signal al suo PID (precedentemente salvato sul DB).
Considerando che non ho a disposizione le PCNTL (sono su hosting Aruba Linux), pensavo di utilizzare un signal che non killasse il processo, ma si limitasse a interromperne lo sleep.
Invece ho provato pressoché tutti i signal che ho trovato su wikipedia tramite posix_kill, e ottengo sempre 2 risultati: o non succede niente e il processo rimane dormiente, o il server mi restituisce un errore 500 Internal Server Error.
Dunque mi chiedo e vi chiedo: questa cosa è fattibile o devo trovare alternative più rozze? Se è fattibile dove sbaglio?

PM Quote
Avatar
Bonny (Member)
Expert


Messaggi: 437
Iscritto: 24/04/2009

Segnala al moderatore
Postato alle 19:24
Lunedì, 10/09/2012
Come vuoi fare tu,secondo me, concettualmente è sbagliato.. prima di tutti se un processo invoca una sleep() nessuno può risvegliarlo, di solito si usano le variabili di condizione con dei cilci while.
ti conviene fare uno script con javascript/jquery che ogni t secondi invia una richiesta al server e successivamente far visualizzare la risposta/notifica ...

PM Quote
Avatar
nabbopazzo (Normal User)
Rookie


Messaggi: 34
Iscritto: 19/01/2009

Segnala al moderatore
Postato alle 21:15
Lunedì, 10/09/2012
A dire il vero qua http://php.net/manual/en/function.sleep.php si intuisce che un segnale può interrompere una chiamata a sleep() e che il valore che questa funzione ritorna è 0 se ha terminato il tempo previsto oppure il numero di secondi trascorsi prima dell'interruzione. Per cui con i segnali qualcosa si può fare, è il come che mi sfugge.

PM Quote
Avatar
Bonny (Member)
Expert


Messaggi: 437
Iscritto: 24/04/2009

Segnala al moderatore
Postato alle 21:42
Lunedì, 10/09/2012
In bocca al lupo:) fammi sapere se trovi qualcosa

PM Quote
Avatar
Mte90 (Member)
Guru


Messaggi: 1144
Iscritto: 25/03/2008

Segnala al moderatore
Postato alle 11:43
Martedì, 11/09/2012
io sono per il consiglio di bonny.
In questo modo il server non rimane in attesa di far esegurie il codice nella pagina riceve la richiesta e risponde subito.

PM Quote