Jump to content

cristiant

Members
  • Content Count

    22
  • Joined

  • Last visited

  1. Ciao ragazzi, ho bisogno di un aiuto se qualche buon'anima me lo può fornire. Utilizzo una shoutbox ajax, ma il grande numero di accessi contemporanei al mio sito (circa 3000 unici contemporanei) mi ha provocato un problema con la cpu del server. Assieme ai ragazzi dell'assistenza abbiamo individuato un primo fattore problematico, ovvero il troppo frequente refresh della shoutbox (che era settato ogni 3 secondi e ora abbiamo portato a 2 minuti, limitando così il numero di chiamate al server. Siamo passati da oltre un milione al minuto a 50mila). Ora però si pone un altro problema, ottimizzare lo script, cercando di eliminare ogni funzione superflua, guadagnando così risorse in termini di ram e cpu utilizzata. Il suggerimento che mi è stato dato è quello di migliorare la parte in cui si richiama una funzione random, ma sinceramente io non so da che parte iniziare. Vi allego qui sotto il codice dello script, sperando in un vostro aiuto: <script language="javascript" type="text/javascript"> <!-- var request; var lastload=0; var refreshTime=3000; // 3 seconds function createRequest() { try { request = new XMLHttpRequest(); } catch (trymicrosoft) { try { request = new ActiveXObject("Msxml2.XMLHTTP"); } catch (othermicrosoft) { try { request = new ActiveXObject("Microsoft.XMLHTTP"); } catch (failed) { request = false; } } } if (!request) alert("Error initializing XMLHttpRequest!"); } createRequest(); function sayIt() { var msg = document.getElementById("myShout").value; document.getElementById("myShout").value = ""; var randomnumber=Math.floor(Math.random()*23123); // get rid of pesky caching... var url = "ajax_command.php?shout=ashout&n="+randomnumber+"&msg="+escape(msg); request.open("GET", url, true); request.onreadystatechange = updateSayIt; request.send(null); } function clearShoutStatus() { document.getElementById("shoutstatus").innerHTML = ""; } function updateSayIt() { if (request.readyState == 1) document.getElementById("shoutstatus").innerHTML = "Aggiornamento live."; if (request.readyState == 4) { document.getElementById("shoutstatus").innerHTML = "Aggiornato"; setTimeout('clearShoutStatus();',refreshTime); getNewShouts(); } } function getShouts() { var randomnumber=Math.floor(Math.random()*23123); // get rid of pesky caching... var url = "ajax_command.php?shout=getshouts&n="+randomnumber; request.open("GET", url, true); request.onreadystatechange = updateShouts; request.send(null); } function updateShouts() { if (request.readyState == 4) if (request.status == 200) // check server result code... { var i; var messagetime; var message; var response = request.responseText.split("~"); document.getElementById("myshouts").innerHTML = ''; for(i=0;i<response.length;i+=3) // go thru each element in array.. length -1 needed.. { message = response; messagetime = response[i+1]; messagetexttime = response[i+2]; document.getElementById("myshouts").innerHTML += ""; document.getElementById("myshouts").innerHTML += "<I>"+message+"</I>"; document.getElementById("myshouts").innerHTML += "<br /><br />"; if(i==0) lastload = messagetime; // use this for when calling updates... } setTimeout('getNewShouts();',refreshTime); // run again in 3 seconds.. } else if (request.status == 404) // check server result code... alert("Could Not Find Page on Server!"); } function getNewShouts() { //createRequest(); var randomnumber=Math.floor(Math.random()*11); // get rid of pesky caching... var url = "ajax_command.php?shout=getnewshouts&time="+lastload+"&n="+randomnumber; // alert(url); request.open("GET", url, true); request.onreadystatechange = updateNewShouts; request.send(null); } function updateNewShouts() { if (request.readyState == 4) { if (request.status == 200) // check server result code... { // send a header of a weird number if unable to find page on server...request.status == 999 var i; var messagetime; var message; var newHTML=""; var response = request.responseText.split("~"); for(i=0;i<response.length;i+=3) // go thru each element in array.. length -1 needed.. { message = response; messagetime = response[i+1]; messagetexttime = response[i+2]; newHTML += "<I>"+message+"</I>"; newHTML += "<br /><br />"; document.getElementById("myshouts").innerHTML = newHTML + document.getElementById("myshouts").innerHTML; if(i==0) lastload = messagetime; // use this for when calling updates... } } else if (request.status == 404) // check server result code... alert("Could Not Find Page on Server!"); setTimeout('getNewShouts();',refreshTime); // run again in 3 seconds.. } } function submitenter(e) { var keycode; if (window.event) keycode = window.event.keyCode; else if (e) keycode = e.which; else return true; if (keycode == 13) { sayIt(); return false; } else return true; } //--> </script> <body onLoad="getShouts()"> <input type="text" id="myShout" onKeyPress="return submitenter(event)" /> <a onMouseDown="sayIt()">say it</a> <font size=1 color="#FF0000"><div id=shoutstatus> </div></font> <div id=myshouts></div> </body>
  2. cristiant

    script ajax

    Ragazzi, io non so come fare a dirvi grazie. Ieri sera ho provato i file e vanno benissimo... questa sera mi metto a studiare il codice per capire bene dove c...o sbagliavo... e mi divertirò anche a smanettare per cambiare il layout... grazie ancora! Io direi che questo ottimo lavoro può essere usato da tutti quelli che necessitano di un sistema di scrittura "live" per i propri lettori...
  3. cristiant

    script ajax

    Ciao, ho letto attentamento il tuo progetto e credo che la soluzione ai miei problemi sia più semplice di quanto immaginassi. Il problema è che mi sono arenato e non riesco più a saltarci fuori. In pratica: io vorrei creare un form di inserimento per una stringa di testo, quindi pubblicare "live" questo testo in un'altra pagina all'interno del mio sito. Credi sia fattibile? Attendo con ansia una tua opinione (se possibile anche un aiuto ehehe)
  4. cristiant

    migliaia di accessi simultanei...

    scusa, ma non capisco perché non vuol dire nulla... se io ho un sito che ha statistiche come quella che ho postato, perché non posso valutare che larghezza di banda minima mi occorre? La mia non è una domanda polemica, è vero spirito di apprendimento...
  5. cristiant

    migliaia di accessi simultanei...

    ultimissima domanda: qual'è una buona larghezza di banda minima per un sito di questo genere?
  6. cristiant

    script ajax

    messaggio per UNO... qui in allegato trovi il componente e il modulo per joomla... grazie mille shoutbox_1_2_unzipfirst.zip
  7. cristiant

    migliaia di accessi simultanei...

    gli eventi che devo seguire vengono "trasmessi" attraverso classifiche tipo livescores
  8. cristiant

    migliaia di accessi simultanei...

    ok, ma andando dritti al problema, voi cosa consigliate: - hosting shared (che caratteristiche dovrà avere?) oppure - server dedicato managed (che caratteristiche dovrà avere?) I costi non sono un problema... (però mi piacerebbe sapere in che ordine di grandezza mi devo muovere...) grazie ancora
  9. cristiant

    script ajax

    e qui casca l'asino (cioè io!!!!). non sono in grado di creare uno script che da frontend permetta all'amministratore di scrivere ed a tutti gli altri di leggere senza fare il refresh... mamma che vergogna...
  10. cristiant

    migliaia di accessi simultanei...

    ancora grazie per l'attenzione. il sito riscontra grande interesse da parte degli utenti in corrispondenza di alcuni eventi che io seguo. Quindi le prospettive di crescita sono poche, o meglio, limitate ai giorni in cui si concentrano le visite (corrispondenti agli eventi seguiti). La mia richiesta era proprio un consiglio riguardo a larghezza di banda e quant'altro, sulla base delle statistiche che ho allegato nel primo post. ovviamente il tutto va rapportato ai numeri del giorno in cui c'è stato il picco, perché il sistema deve reggere proprio in quella situazione. La normale attività non mi creerà mai problemi perché gli utenti sono pochi....
  11. cristiant

    script ajax

    Ciao, innanzitutto grazie mille.. ho provato a guardare velocemente il sito che mi hai linkato... il mio problema (probabilmente) è più semplice di quanto si possa pensare, ma io in questo momento non riesco a saltarci fuori. Credo si tratti solamente di cambiare qualche variabile nel codice, perché in definitiva la mia shoutbox funziona alla perfezione, ma impedisce di vedere l'aggiornamento live agli utenti non iscritti. A me basterebbe che gli utenti non iscritti potessero leggere "in diretta" i nuovi messaggi, senza però potere scrivere... Secondo te è possile una soluzione?
  12. cristiant

    migliaia di accessi simultanei...

    Per il momento il budget non è un problema... o meglio, naturalmente si va alla ricerca della migliore soluzione qualità/prezzo.... Della serie: perché spendere 500 euro se si può fare con 150... (le mie sono solo cifre indicative...per questo volevo consigli)
  13. cristiant

    script ajax

    Ciao ragazzi, approfitto di questa sezione per postare un problema sul quale sto lavorando da un pò di tempo senza successo. Ho la necessità di inserire una "cronaca live" testuale nel mio sito, che gli utenti (anche non registrati) possano leggere in diretta senza il bisogno di fare il refresh della pagina. A questo proposito avevo individuato Ajax Shoutbox (utilizzo come cms joomla), ma questo bellissimo componente consente la lettura "in diretta" solamente agli utenti registrati. Cosa che io non voglio, perché a questo punto chiunque si registra può scrivere nella shoutbox andando ad incasinare i messaggi dell'amministratore... spero di essere stato chiaro, altrimenti se qualche anima buona mi vuole aiutare, fornirò spiegazioni più dettagliate... Grazie ancora
  14. cristiant

    migliaia di accessi simultanei...

    in effeti è proprio così... sto rifacendo un sito che fino ad ora ho solamente gestito... quindi, la "cronaca live" vorrei farla con un modulo in ajax (qui accetto consigli, anche se ho individuato ajax shoutbox a cui però devo fare alcune modifiche), considerato che sarebbe solamente composta da testo... Rimane il fatto che 3000 accessi simultanei io li considero tanti, ma se voi mi assicurate il contrario mi fido sicuramente.... Quindi, ricapitolando, voi mi consigliate un hosting shared di media alta qualità? Se si, avete avuto esperienze personali positive?
  15. cristiant

    migliaia di accessi simultanei...

    Gli accessi sono concentrati in due/tre ore, in corrispondenza di un particolare evento che io decido di seguire... In pratica gli utenti continuano a collegarsi facendo il refresh della pagina, quindi i 3000 contatti simultanei generano un altissimo carico di lavoro per il server. La soluzione hosting posso anche prenderla in considerazione, ma ho visto che fatica a reggere... ad esempio sabato mi si è bloccata e per un'ora gli utenti hanno trovato la pagina di errore.... A questo punto chiedo a voi, utilizzando joomla, come fare per creare una sorta di "cronaca live" senza dover fare il refresh della pagina e appensantire il lavoro del server.... Scusate, ma il problema inizia a farsi complicato (ma interessante!)
×