Ciao. Sto creando una chat di supporto agli utenti, usando ASP e javascript (AJAX).
Vorrei avere un parere su come l'ho strutturata e consigli su come fare di meglio. Posto in questo forum perchè mi sembra che sia più una problematica lato server (altrimento prego gli admin di spostarlo nella sezione corretta, grazie).
Premessa.
Per ora la chat limita il dialogo tra un solo operatore, con un solo utente. Se l'operatore sta parlando con uno, nessun altor utente potrà fare richiesta di supporto online.
Ci sono due variabili di applicazione a fondamento di tutto:
- status: indica se l'operatore è disponibile a rispondere in chat
- logged: indica se l'utente è loggato
Vado per punti:
- Accesso lato USER:
Si visualizza un link "PARLA CON NOI" se l'operatore è online o se non sta già parlando con un altro utente; un link "CONTATTACI" se non è loggato o se è occupato.
Implementazione:
Per ora l'ho implementato usando un javascript che ogni tot secondi carica con l'XMLHttpRequest di AJAX una pagina asp: questa restituisce allo script il valore di status e, a seconda di questo, abilita o meno l'entrata in chat.
Se l'admin è loggato, l'utente entra nella chat e si logga (setta logged = true).
- Accesso lato ADMIN:
Quando un utente entra in chat, nella pagina admin compare un avviso di richiesta conversazione (con tanto di segnale sonoro) . L'operatore clicca sul link e si apre la chat.
Implementazione:
Se l'admin non è loggato, status = "occupato". Appena si logga, status = "libero".
Anche qui è neccessario un "polling", una continua chiamata ogni tot secondi (2? 5?) tramite AJAX a una pagina che restituisce il valore di logged. Appena la variabile è true, manda l'avviso all'admin.
Quando l'admin accetta la conversazione con un utente, un javascript richiama in background la solita pagina asp che setta status = "occupato": gli altri utenti non possono più entrare. Inoltre resetta a false il valore di logged.
- La chat vera e propria:
All'apertura della chat, con AJAX chiamo un file asp, il quale:
1) crea un file xml (o sovrascrive uno già esistente), se è la prima volta che viene richiamato (quando l'utente è appena entrato);
2) apre il file xml stesso con XMLHTTP di ASP
3) lo stampa in output
Richiamando questo file asp, dunque, ottengo un file xml che viene "parsato" da js e stampato e formattato in un div con scrollbars.
Cosa contiene questo file xml? Inizialmente niente.
Però, quando l'utente scrive un testo e lo invia, javascript richiama ancora questa pagina asp, questa volta passandogli tale testo. Mediante XMLDOM di ASP, creo i vari nodi (nome, ora, testo...) e li salvo nel file xml. Quindi ripete i passi 2 e 3. Il file viene così ricaricato (il bello è che non ricarica mai la pagina!) e il testo della chat aggiornato.
Inoltre, ogni due secondi, javascript ricarica il file xml.
- Uscita dalla chat lato USER:
Grazie all'intercettazione dell'evento onUnload, appena l'utente chiude la popup con la chat, viene inviato il testo "/quit" (come se l'avesse scritto l'utente), in modo che all'admin compaia la notifica che l'user ha abbandonato la conversazione. 500 ms dopo, fa un redirect ad una pagina asp che esegue il logout. Tutto ciò (incredibilmente) riesce ad avvenire prima che la finestra venga effettivamente chiusa e l'user non se ne accorge proprio.
- Uscita lato ADMIN:
Quando l'admin chiude la sua finestra (presumibilmente dopo che gli è stato notificato che l'user è uscito), al verificarsi dell'evento onUnload, viene caricata con AJAX una pagina che setta lo status su "libero", in modo che l'admin potrà nuovamente essere contattato.
Questo è tutto il funzionamento. Ecco i problemi.
Sembrerebbe funzionare tutto, ma, dopo un po' di volte che la pagina di admin verifica la variabile logged, si blocca e non notifica più niente. La stessa cosa accade alla pagina di accesso PARLA/CONTATTACI. Evidentemente il problema starà nel fatto che, continuando a richiamare una pagina asp, il server si impalla e mi manda a quel paese. Per quanto riguarda il continuo caricamento del file xml, sembra non avere di questi problemi, ma devo ancora finire di testarlo: magari dopo un po' di tempo si impalla anche lui.
L'altro problema fondamentale sta nel fatto che sembra che FireFox non rilevi l'evento onUnload e così mi si incasina tutto, perchè le variabili non vengono resettate! Così quando un utente esce e l'admin chiude la finestra, il suo stato rimane occupato.
In genere nelle chat come si risolvono questi problemi? In particolare quello dell'aggiornamento del testo?
Se avete consigli, suggerimenti, critiche... sono più che ben accetti!
Grazie a tutti (soprattutto quelli che hanno avuto la pazienza di leggersi tutto sto malloppone!) :quote:

Rispondi quotando
In effetti sarebbe stato meglio farla in Java, però non ho idea di come creare connessioni o cose del genere... boh.. (non ho ancora studiato java applicato al web, niente applet per ora)