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

    socket e porte: non so se si può fare...

    Vi espongo brevemente il mio problema: ho un flusso continuo di dati sulla porta 10000 del server. Devo leggere costamente da questa porta e visulizzare il dato che leggo (una serie di numeri) in un livello di testo. Allo scopo ho preparato 2 pagine, questa è quella che effettua la lettura dei dati:
    Codice PHP:
    $fp pfsockopen($_SERVER['HTTP_HOST'], '8888'$errno$errstr5);
    if (!
    $fp) die("errore di connessione");
    else {
            
    fwrite($fp,"\n");
            echo 
    fgets ($fp,128);

    La lettura viene fatta correttamente.
    Nell'altra pagina recupero questo output tramite una funzione ajax che ogni 500 millisecondi va ad aggiornare un livello di testo. Funziona, però ci sono un po' di problemi legati all'apertura delle porte. Ogni volta che vado a fare una lettura, viene aperta una nuova porta (e chiusa subito dopo); dopo un minuto mi ritrovo con una infinità di porte che sono state aperte e chiuse (quindi una ogni 500 millisecondi). In una situazioni di molti utenti collegati, quali problemi potrei avere? Non esiste un modo per utilizzare un'unica porta per gestire il flusso dei dati? Pensavo che pfsockopen, in quanto apre una connessione persistente, mantenesse aperta una singola porta. Avete suggerimenti?

  2. #2
    Non hai specificato se stai lavorando con TCP o UDP.
    In ogni caso il tuo socket 'bindato' sulla porta 10000 aprirà per forza di cose una nuova porta per ogni nuova connessione la quale verrà chiusa una volta che il client si sarà disconnesso.

    dopo un minuto mi ritrovo con una infinità di porte che sono state aperte e chiuse (quindi una ogni 500 millisecondi)
    Se ti stai riferendo agli stati quali CLOSE_WAIT, FIN_WAIT e cose di questo tipo non c'è niente di cui preoccuparsi: la connessione è gia chiusa. Quegli stati spariscono dopo qualche decina di secondi.

    In una situazioni di molti utenti collegati, quali problemi potrei avere?
    Se molti client sono connessi simultaneamente nello stesso momento potresti intercorrere in problemi di performance (ottimista) fino ad arrivare a DoS (pessimista), dipendentemente dal numero di client connessi e dal lavoro computazionale che il server svolge per servirli.
    In questi casi, specialmente se tali socket li gestisci tramite select(), poll() o affini, è sempre bene settare un limite massimo di connessioni accettabili (es: 512) superato il quale la connessione di eventuali altri client viene rifiutata.
    Rilasciata Python FTP Server library 0.5.1
    http://code.google.com/p/pyftpdlib/

    We'll be those who'll make the italian folks know how difficult can be defecating in Southern California without having the crap flying all around the house.

  3. #3
    Grazie per la risposta. Lavoro in TCP, non l'avevo detto.
    Purtroppo non posso limitare l'accesso ai client, gli utenti possono essere indefiniti.
    Non c'è un modo più intelligente per evitare di generare tutto questo traffico? Che so, mantenere un canale aperto e continuare a fare la lettura dallo stesso...

  4. #4
    Ma solitamente quanti utenti ti capita di avere connessi simultaneamente?
    Rilasciata Python FTP Server library 0.5.1
    http://code.google.com/p/pyftpdlib/

    We'll be those who'll make the italian folks know how difficult can be defecating in Southern California without having the crap flying all around the house.

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.