Ciao a tutti!
In pratica mi trovo ad avere più clients che stampano dati sulla porta 23 ma questi clients non possono connettersi in nessun modo ad un server(sembra strano,lo so, ma è un progetto di domotica con arduino, e i moduli wifi ESP8266 (con il particolare firmware che ho caricato) mi permettono solo di stampare dati sulla porta 23 di ogni client senza darmi la possibilità di effettuare connessioni esterne).
Ho già scritto un mini codice funzionante che si connette ad un solo client, legge i valori sulla porta 23 e li salva nel database. Eccolo:
Codice PHP:
<?php
error_reporting(E_ALL);
$lunghezza=20;
$address = '192.168.1.10';
$port = 23;
$buffer = "";
if (($socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) === false) {
echo "socket_create() è fallita: ragione: " . socket_strerror(socket_last_error()) . "\n";
}
socket_connect ( $socket , $address , $port );
$buffer = socket_read ( $socket , $lunghezza );
$con = mysqli_connect("localhost", "pippo", "pluto", "domotica");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
$query = "
INSERT INTO `domotica`.`sensore` (`idsensore`, `tipo`, `valore1`) VALUES (1234, 'dht22', '$buffer');";
mysqli_query($con, $query);
mysqli_close($con);
?>
(Qualsiasi critica di inefficienza del codice è molto ben accetta!!
)
I clients possono stampare dati sulla porta 23 ad intervalli di tempo prestabiliti ma,ripeto, non possono comunicare con l'esterno in alcun modo (non possono neanche mandare un byte per comunicare al server che sta per stampare i dati).
Potrei connettermi ad ogni client singolarmente, aspettare con socket_read che i dati arrivino,salvarli e passare al client successivo, ma sarebbe molto inefficiente per un sistema "real-time"(si pensi di dover attendere 10 secondi per client per centinaia di clients. Vorrebbe dire aspettare fino a 30 minuti prima di vedere visualizzato sulla pagina web che, per esempio, una luce è stata accesa).
Come posso far connettere il server a più clients e leggere i dati nella maniera più efficiente possibile?
Qualsiasi consiglio sarebbe di grande aiuto!!
Grazie mille in anticipo a chiunque possa indirizzarmi sulla giusta via.
Michael