Pagina 2 di 2 primaprima 1 2
Visualizzazione dei risultati da 11 a 16 su 16
  1. #11
    Utente di HTML.it
    Registrato dal
    Feb 2015
    Messaggi
    44
    Grazie mille, siete stati grandi,
    stasera metto insieme tutto adesso ho abbastanza materiale.
    devo tenere in ascolto il client se arrivano notifiche o messaggi.
    una volta che so se ci sono messaggi partono tutte le procedure alla ricerca del messaggio fino a farlo apparire nella chat box; ma questo processo è decisamente veloce, è il monitoraggio da fare inizialmente che mi dava da fare.
    Se ho problemi dopo vi rompo ancora

  2. #12
    Utente di HTML.it
    Registrato dal
    Feb 2015
    Messaggi
    44
    Lato server
    codice:
    
    <?php
    header("Content-Type: text/event-stream\n\n");
    require '../settings.php';
    include ('../../include/conn_db_mysqli.php'); 
    
    
    session_start();
    secure_session();
    	
    $g_session_id = $_SESSION['session_id'];
    
    
    while (true)
    {  
       $current_msg=getLastCheckedMsg($conn2,$g_session_id);
        sleep(1);
        echo "data: messaggi ".$current_msg." \n\n";
        // This will ensure our data is sent provided you set this
        // in your php.ini:
        // output_buffering = off
        ob_flush();
        flush();
    }
    
    
    function getLastCheckedMsg($conn2,$g_session_id){
    	$table='tblutenti';
    	$fields="messaggi";
    	$condition=array("id" => $g_session_id);
    		
    	$message=db_read_tbl_opAND($table, $fields, $condition);
    	return $message;	
    }
    lato client
    codice:
    document.addEventListener("DOMContentLoaded", function() {
      var  eventSrc  = new EventSource( "core/dynamic_call/something_is_incoming_SSE.php" ), 
      	   handler = function( event ) {
           	    console.log( [ event.type, new Date(), event, event.data ] );
      },
      getReadyState = function( src ) {
        if ( src.readyState ) {
          // readyState is almost always 0, we're only interested in 
          // seeing readyState OPEN (1) ( or CLOSED (2) )
          console.log( [ src.readyState, new Date() ] );
        }
        setTimeout(function() {
          getReadyState( src );
        }, 20000);
      };
      console.log( eventSrc );
      // Setup event handlers
      [ "open", "message" ].forEach( function( name ) {
      	  eventSrc.addEventListener( name, handler, false );
      });
      // Begin sampling the ready state
      getReadyState( eventSrc );
    }, false);
    FUNZIONA ALLA GRANDE!
    adesso lo rendo compatibile con gli altri browser
    grazie infinite

  3. #13
    Utente di HTML.it L'avatar di .Kurt
    Registrato dal
    Jul 2007
    Messaggi
    654
    Uhm, credo che potresti avere alcuni problemi. Prima di tutto consiglio caldamente di aggiungere quel controllo di timeout

    codice:
      if ((time() - $startedAt) > 30) {
        die;
      }
    per terminare la richiesta dopo tot secondi. In molte configurazioni questo non è un problema, perchè "max_execution_time" è solitamente settato a 30 secondi. Ma il funzionamento di uno script non dovrebbe essere legato alla configurazione. Ricorda che php è thread-based: più utenti si connettono, più processi occupi, meno risorse libere hai.

    Il problema principale è l'utilizzo di session_start() lì. Una volta aperta la sessione, l'accesso al file con i dati della sessione viene bloccato a tutti gli altri. E con tutta probabilità non vuoi che i tuoi utenti, una volta fatto partire questo meccanismo, siano impossibilitati ad aprire un'altra pagina, o ad aspettare che il processo termini da solo. Il mio consiglio quindi è di non aspettare la fine dello script per sbloccare la sessione: fallo tu richiamando session_write_close(). Fallo prima di entrare nel loop, e non dovresti avere problemi.

  4. #14
    Utente di HTML.it
    Registrato dal
    Feb 2015
    Messaggi
    44
    Quote Originariamente inviata da .Kurt Visualizza il messaggio
    Uhm, credo che potresti avere alcuni problemi. Prima di tutto consiglio caldamente di aggiungere quel controllo di timeout

    codice:
      if ((time() - $startedAt) > 30) {
        die;
      }
    per terminare la richiesta dopo tot secondi. In molte configurazioni questo non è un problema, perchè "max_execution_time" è solitamente settato a 30 secondi. Ma il funzionamento di uno script non dovrebbe essere legato alla configurazione. Ricorda che php è thread-based: più utenti si connettono, più processi occupi, meno risorse libere hai.

    Il problema principale è l'utilizzo di session_start() lì. Una volta aperta la sessione, l'accesso al file con i dati della sessione viene bloccato a tutti gli altri. E con tutta probabilità non vuoi che i tuoi utenti, una volta fatto partire questo meccanismo, siano impossibilitati ad aprire un'altra pagina, o ad aspettare che il processo termini da solo. Il mio consiglio quindi è di non aspettare la fine dello script per sbloccare la sessione: fallo tu richiamando session_write_close(). Fallo prima di entrare nel loop, e non dovresti avere problemi.
    Lo sai che questo era anche il problema che mi bloccava il refresh delle pagine nel long polling? Adesso funziona bene anche quello

  5. #15
    Utente di HTML.it L'avatar di .Kurt
    Registrato dal
    Jul 2007
    Messaggi
    654
    Bhè, mi auguro che continuerai comunque con SSE piuttosto che ritornare a fare pull request

  6. #16
    Utente di HTML.it
    Registrato dal
    Feb 2015
    Messaggi
    44
    Certo!! però lo tengo come ultimissima risorsa per chi usa browser vecchi (anche se si meriterebbero di avere qualche malfunzionamento).
    Ascolta kurt grazie davvero ciao!

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.