ho sviluppato una chat completamente in AJAX funzionante via web e necessita solo di un browser moderno...
se volete andare a farci un giretto l'indirizzo è http://www.tarini.biz/ajax/xchat
fatemi sapere che ne pensate :P :P
ho sviluppato una chat completamente in AJAX funzionante via web e necessita solo di un browser moderno...
se volete andare a farci un giretto l'indirizzo è http://www.tarini.biz/ajax/xchat
fatemi sapere che ne pensate :P :P
www.gext.it
ogni tanto invia due volte invece che una sola
è comunque un buon lavoro, se posso darti alcuni consigli ...
1 - aumenta il tempo di refresh, così ti auto-killi il server se ci sono tante persone (porta l'aggiornamento ad almeno 2 secondi, meglio 2 e mezzo o 3, uno o mezzo è troppo poco)
2 - disabilita i tasti quando si effettuano le operazioni, se invio non devo poter reinviare finchè la chat non ha finito l'elaborazione del precedente invio
3 - quando si invia, la chat non deve caricare niente, deve fermare il precedente reload, inviare e legere la risposta per poi reimpostare il reload
detto questo non capisco il senso di mostare la sessione all'untente, cosa se ne fa di una stringa da 16 caratteri in esadecimale ?
![]()
questa non mi è tanto chiara...Originariamente inviato da andr3a
3 - quando si invia, la chat non deve caricare niente, deve fermare il precedente reload, inviare e legere la risposta per poi reimpostare il reload
è semplicemente a scopi di debug :POriginariamente inviato da andr3a
detto questo non capisco il senso di mostare la sessione all'untente, cosa se ne fa di una stringa da 16 caratteri in esadecimale ?
![]()
ps grazie per il tempo perso e per i primi due consigli![]()
www.gext.it
le chat non basate su socket hanno 2 caratteristiche:Originariamente inviato da tarini
questa non mi è tanto chiara...
1 - sfruttano un refresh ogni tot secondi
2 - proprio perchè sfruttano un refresh sono critiche con tanta utenza simultanea, quindi non vanno sempre bene e rischiano di intasare il server
per evitare di ritrovarsi di prepotenza al punto 2 devi tentare di richimare il server meno volte possibili.
quando un utente effettua l'invio di dati stà usando un oggetto asincrono, se un'latro nel frattempo richiede il testo del "canale" le richieste diventano doppie, per il client che invia o riceve e per il server, che elabora la richiesta dati due volte, una per inserirla ed una per mostrare il testo del canale.
La situazione più comune e fastidiosa è che mentre invio ricevo la risposta dal server che non aveva ancora elaborato il mi otesto inviato.
Questo comporta uno slittamento di tempo tra l'invio e la visualizzazione sul canale del testo.
Come si risolve ?
L'azione invia testo deve fermare immediatamente l'oggetto addetto alle richieste, effettuare l'invio del testo che sul serer verrà salvato su file o database ma allo stesso tempo verrà restituito l'aggiornamento del canale, quindi l'invio diventa anche una chiamata.
Alla fine dell'invio si scrive il risultato della chiamata sul canale e dopo questo si può riabilitare l'intervallo di tempo per l'altro oggetto addeto al solo aggiornamento e non anche all'inserimento.
Questo evita il presunto mancato inserimento su chiamate sovrapposte ed assicura meno carico e meno chiamate per il server (ma anche un intervallo di almeno 2 secondi per ogni aggiornamento dovrebbe aiutare, meno di 2 diventa pesante da gestire on-line).
Spero di essermi spiegato meglio![]()
attualmente ho presupposto alcune funzioni tra le quali le seguenti:
sendmex -> che si occupa di inviare il messaggio al server
refresh -> che si occupa di refreshare la pagina con nuovi messaggi e con l'aggiornamento degli utenti online.
sendmexCallback -> che si occupa di gestire il callback della richiesta effettuata dalla funzione sendmex
All'interno della funzione callback eseguo la funzione refresh aggiornando l'intera pagina e quindi riportando PER FORZA anche l'ultimo messaggio inserito...
Sei sicuro che si possano verificare errori di invio messaggio e di non visualizzazione dello stesso??
www.gext.it
ho parlato di impressione e latenza, non di mancata visualizzazione.Originariamente inviato da tarini
Sei sicuro che si possano verificare errori di invio messaggio e di non visualizzazione dello stesso??
i metodi dovrebbero essere solo 2
load => aggiorna con tutti i messaggi
sendAndLoad => elimina l'intervallo del load, invia e riceve tutti i messaggi con una sola chiamata, aggiorna con questi (quindi ultimo compreso), riattiva l'intervallo del load
queste le basi per una chat asincrona, imho![]()
compreso perfettamente la tua idea. cercherò di implementarla il prima possibile!
solo una cosa...
sai come fare in js a disattivare un timeout inserito precendentemente??Originariamente inviato da andr3a
sendAndLoad => elimina l'intervallo del load, invia e riceve tutti i messaggi con una sola chiamata, aggiorna con questi (quindi ultimo compreso), riattiva l'intervallo del load
basta chiamare un setTimeout() vuoto??
www.gext.it
sistemato il problema che dicevi
ora il metodo sendMex con un unica connessione manda il messaggio nuovo e riceve i messaggi da stampare![]()
![]()
![]()
inoltre ho aggiunto un controllo client-side per evitare l'invio multiplo dello stesso messaggio e la stampa del timestamp relativo all'invio di ciascun messaggio !
pare tutto funzionare![]()
![]()
www.gext.it
Quando setti l'intervallo assegnalo ad una variabile pubblica:Originariamente inviato da tarini
sai come fare in js a disattivare un timeout inserito precendentemente??
miaVar = setTimeout(....)
per interromperlo basta:
clearTimeout(miaVar)
info: http://www.devguru.com/technologies/...ript/10855.asp
ciao
Il guaio per i poveri computers e' che sono gli uomini a comandarli.
Attenzione ai titoli delle discussioni: (ri)leggete il regolamento
Consultate la discussione in rilievo: script / discussioni utili
Usate la funzione di Ricerca del Forum
ottimo
ho apportato degli ulteriori miglioramenti sia alla struttura client che alla struttura server!
ho notato anche che molta gente è salita a dare il suo contributo di tester! GRAZIE A TUTTI
mi ha contattato lo staff di html.it, tra poco passerò a loro i sorgenti in modo che li possano mettere nella sezione script
prossime modifiche:
- notifica quando un utente lascia la chat
- faccine
- varie ed eventuali
a presto!
www.gext.it