
Nei precedenti articoli “PHP: un socket TCP per acquisire dati dal GPS Tracker GPS-102 compatibile OpenGTS” (prima, seconda e terza parte), ho descritto come implementare un socket TCP in PHP per acquisire i dati GPS da un tracker di tipo TK-102 (e compatibili).
Lo script però era progettato per singolo processo, cioè non poteva servire più di una connessione alla volta e non era dunque in grado di gestire connessioni concorrenti.
E’ invece molto utile che un socket server di questo tipo sia in grado di gestire connessioni concorrenti in modo da prendere in carico più GPS tracker contemporaneamente. Fortunatamente il linguaggio PHP supporta la programmazione multi-processo attraverso l’utilizzo di fork(). In questo modo il processo padre chiamato in causa da una nuova connessione genera un processo figlio che condivide le variabili e le risorse e rimane libero di accettare nuove connessioni.
Ho approfittato dell’occasione di riscrivere il codice in modalità multiprocesso anche per aggiornare la connessione al database server MySQL utilizzando l’estensione mysqli al posto della originale mysql ormai deprecata nel PHP 5.5.x. Infine ho semplificato il codice togliendo il controllo sulla soglia di movimento e correggendo alcuni bug.
Un buon esempio di scrittura di socket multi-processo è consultabile qui, e da questo esempio ho adottato l’intelaiatura del codice.
Chi desidera avere il codice completo mi può contattare: spadamar@spadamar.com
Per i settaggi vale quanto riportato nell’articolo: PHP: un socket TCP per acquisire dati dal GPS Tracker GPS-102 compatibile OpenGTS (seconda parte)
Riferimenti:
- http://code.hootsuite.com/parallel-processing-task-distribution-with-php/
- http://php.net/manual/en/function.socket-accept.php
- https://github.com/feraudet/tracker
