Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    socket_read su più socket contemporaneamente

    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_INETSOCK_STREAMSOL_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

  2. #2
    Intanto capiamoci: non sono i clients che si connettono a te ma te che ti connetti ai clients. Quindi, per vederla alla rovescia, tu sei un client che si connette a tanti servers che mandano, di tanto in tanto informazioni. Ergo, data una lista di IP (i tuoi clients), per ogni IP devi aprire un socket che ascolta quello che il client ha da dire e lo salva. Sostanzialmente tutto il pezzo di codice che hai fatto te, solo ripetuto per tutti gli IP a cui vuoi connetterti ed eseguito in processi separati ( http://php.net/manual/en/function.pcntl-fork.php , https://florian.ec/articles/running-...cesses-in-php/ , http://code.hootsuite.com/parallel-p...tion-with-php/ )
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  3. #3
    Giusto! ho usato una terminologia sbagliata! Comunque grazie mille della dritta Santino83!! Sei stato di grande aiuto!!

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 © 2025 vBulletin Solutions, Inc. All rights reserved.