C’è un modo per spingere i dati dal web server al browser?

Naturalmente sono a conoscenza di Ajax, ma il problema con Ajax è che il browser deve interrogare frequentemente il server per scoprire se ci sono nuovi dati. Ciò aumenta il carico del server.

Esiste un metodo migliore (anche usando Ajax) diverso dal polling del server frequentemente?

Sì, quello che stai cercando è COMET http://en.wikipedia.org/wiki/Comet_(programming) . Altri buoni termini di Google da cercare sono AJAX-push e reverse-ajax.

Sì, si chiama Reverse Ajax o Comet . Comet è fondamentalmente un termine generico per diversi modi di aprire richieste HTTP longeve al fine di inviare dati in tempo reale a un browser web. Suggerirei StreamHub Push Server , hanno alcune demo interessanti ed è molto più facile iniziare con tutti gli altri server. Consulta la Guida introduttiva di Comet e StreamHub per una rapida introduzione. Puoi utilizzare la Community Edition che è disponibile per il download gratuito ma è limitata a 20 utenti simultanei. La versione commerciale è valsa la pena per il solo supporto e in più si ottengono adattatori client SSL e desktop .NET e Java. L’aiuto è disponibile tramite il gruppo Google , ci sono un buon numero di tutorial in rete e c’è anche un adattatore GWT Comet .

Al giorno d’oggi dovresti usare WebSockets. Questo è lo standard del 2011 che consente di avviare connessioni con HTTP e quindi di aggiornarle alla comunicazione basata su messaggi client-server bidirezionale.

Puoi facilmente iniziare la connessione da javascript:

var ws = new WebSocket("ws://your.domain.com/somePathIfYouNeed?args=any"); ws.onmessage = function (evt) { var message = evt.data; //decode message (with JSON or something) and do the needed }; 

La gestione del lato server dipende dallo stack tenchnology.

Guarda in Comet (una parodia del fatto che Ajax è un agente di pulizia e così anche Comet) che è sostanzialmente “reverse Ajax”. Tieni presente che ciò richiede una connessione server di lunga durata affinché ciascun utente possa ricevere notifiche, in modo da tenere conto delle implicazioni in termini di prestazioni durante la scrittura della tua app.

http://en.wikipedia.org/wiki/Comet_(programming)

Comet è sicuramente quello che vuoi. A seconda dei requisiti di lingua / struttura, sono disponibili diverse librerie server. Ad esempio, WebSync è un server comet integrato in IIS per gli sviluppatori ASP.NET/C#/IIS e ci sono anche un sacco di altri server standalone se hai bisogno di un’integrazione più stretta con altre lingue.

Suggerisco caldamente di investire un po ‘di tempo su Comet, ma non conosco un’implementazione o una libreria effettiva che potresti usare.

Per una sorta di “pannello di controllo callcenter” di un’app Web che implicava l’aggiornamento dell’agente e dello stato di chiamata per un Callcenter attivo, abbiamo sviluppato una soluzione interna che funziona, ma è molto lontana da una libreria che è ansible utilizzare.

Quello che abbiamo fatto è stato implementare un piccolo servizio sul server che parla al sistema telefonico, attende nuovi eventi e mantiene una fotografia della situazione. Questo servizio fornisce un piccolo server web.

I nostri web-client si collegano via HTTP a questo server web e chiedono l’ultima foto (codificata in XML), la visualizza e poi torna a chiedere la nuova foto. Il webserver a questo punto può:

  • Restituisce la nuova foto, se ce n’è una
  • Blocca il client per alcuni secondi (30 nella nostra configurazione) in attesa che qualche evento si spenga e cambi la fotografia. Se nessun evento è stato generato in quel punto, restituisce la stessa foto, solo per consentire alla connessione di rimanere triggers e non interrompere il client.

In questo modo, quando i sondaggi dei clienti, ottiene una risposta in massimo da 0 a 30 secondi. Se un nuovo evento è già stato generato, lo ottiene immediatamente), altrimenti blocca fino a quando non viene generato un nuovo evento.

È fondamentalmente un sondaggio, ma è un sondaggio piuttosto intelligente per non surriscaldare il server web. Se Comet non è la tua risposta, sono sicuro che ciò potrebbe essere implementato usando la stessa idea ma usando AJAX o codifica in JSON più estensivamente per risultati migliori. Questo è stato progettato prima dell’era AJAX, quindi ci sono molti margini di miglioramento.

Se qualcuno è in grado di fornire un’implementazione veramente leggera di questo, ottimo!

Un’interessante alternativa a Comet è l’uso di socket in Flash.

Ancora un altro, standard, modo è SSE (Eventi inviati dal server, noto anche come EventSource , dopo l’object JavaScript).

Comet è stata in realtà coniata da Alex Russell di Dojo Toolkit ( http://www.dojotoolkit.org ). Ecco un link a più informazioni http://cometdproject.dojotoolkit.org/

Ci sono altri metodi Non sono sicuro che siano “migliori” nella tua situazione. Si potrebbe avere un’applet Java che si connette al server al caricamento della pagina e attende che i materiali vengano inviati dal server. Sarebbe un po ‘più lento all’avvio, ma consentirebbe al browser di ricevere dati dal server su una base poco frequente, senza il polling.

È ansible utilizzare un’applicazione Flash / Flex sul client con BlazeDS o LiveCycle sul lato server. I dati possono essere trasferiti al client utilizzando una connessione RTMP. Tieni presente che RTMP utilizza una porta non standard. Ma puoi facilmente tornare al polling se la porta è bloccata.

È ansible raggiungere ciò a cui si mira attraverso l’uso di connessioni HTTP persistenti.

Controlla l’ articolo di Comet su wikipedia, è un buon punto di partenza.

Non stai fornendo molte informazioni ma se stai cercando di build una sorta di sito basato sugli eventi (a’la digg spy) o qualcosa del genere, probabilmente stai pensando di implementare un IFRAME nascosto che si connette a un URL in cui la connessione non si chiude mai e quindi si spingeranno tag script dal server al client per eseguire gli aggiornamenti.

Potrebbe essere opportuno verificare Meteor Server, un server Web progettato per COMET. Bella demo ed è anche usata da twitterfall .

Una volta che una connessione è aperta al server, può essere mantenuta aperta e il server può spingere il contenuto molto tempo fa con l’utilizzo di multipart/x-mixed-replace ma questo non ha funzionato in IE.

Penso che tu possa fare cose intelligenti con il polling che lo faccia funzionare più come push non inviando intestazioni invariate ai contenuti ma lasciando aperta la connessione ma non l’ho mai fatto.

Potresti provare la nostra componente Comet , anche se è estremamente sperimentale …!

consulta questa libreria https://github.com/SignalR/SignalR per sapere come inviare dati ai client in modo dinamico non appena disponibili

Puoi anche guardare in Pushlet Java se stai usando le pagine jsp.

Potrebbe volere anche ReverseHTTP .