Domanda

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

Esiste un metodo migliore (anche utilizzando Ajax) oltre al polling frequente del server?

È stato utile?

Soluzione

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

Altri suggerimenti

Sì, si chiama Ajax rovesciato O Cometa.Comet è fondamentalmente un termine generico per diversi modi di aprire richieste HTTP di lunga durata per inviare dati in tempo reale a un browser web.Lo consiglierei Server di spinta StreamHub, hanno delle demo interessanti ed è molto più facile iniziare rispetto a qualsiasi altro server.Dai un'occhiata a Tutorial introduttiva su 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 vale la pena solo per il supporto e in più ottieni adattatori client SSL e Desktop .NET e Java.L'aiuto è disponibile tramite Gruppo Google, c'è un bel po' di tutorial in rete e c'è un file Adattatore GWT Cometa pure.

Al giorno d'oggi dovresti usare i WebSocket.Si tratta di uno standard del 2011 che consente di avviare connessioni con HTTP e quindi aggiornarle alla comunicazione bidirezionale basata su messaggi client-server.

Puoi facilmente avviare 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 dei server dipende dallo stack tecnologico.

Guarda in cometa (una parodia del fatto che l'Ajax è un agente di pulizia e così come la cometa) che è fondamentalmente "Ajax inverso". Sii consapevole che ciò richiede una connessione server di lunga durata per ciascun utente per ricevere notifiche, quindi sii consapevole delle implicazioni delle prestazioni quando si scrive la tua app.

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

La cometa è sicuramente ciò che desideri.A seconda dei requisiti del linguaggio/framework, sono disponibili diverse librerie server.Per esempio, WebSync è un server Comet integrato in IIS per sviluppatori ASP.NET/C#/IIS, e ci sono anche molti altri server autonomi se hai bisogno di un'integrazione più stretta con altre lingue.

Suggerirei vivamente di investire un po' di tempo su Comet, ma non conosco un'implementazione effettiva o una libreria che potresti utilizzare.

Per una sorta di "pannello di controllo del callcenter" di un'app Web che prevedeva l'aggiornamento dello stato dell'agente e della coda di chiamata per un Callcenter attivo, abbiamo sviluppato una soluzione interna che funziona, ma è lontana da una libreria che potresti utilizzare.

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

I nostri client web si collegano tramite HTTP a questo server web e chiedono l'ultima foto (codificata in XML), la visualizzano e poi vanno di nuovo, chiedendo la nuova foto.Il webserver a questo punto può:

  • Restituisci la nuova foto, se ce n'è una
  • Blocca il client per alcuni secondi (30 nel nostro setup) aspettando che si verifichi qualche evento e cambia la fotografia.Se a quel punto non è stato generato alcun evento, restituisce la stessa foto, solo per consentire alla connessione di rimanere attiva e non mandare in timeout il client.

In questo modo, quando i client eseguono il polling, ricevono una risposta in un tempo compreso tra 0 e 30 secondi al massimo.Se è già stato generato un nuovo evento lo ottiene immediatamente), altrimenti si blocca finché non viene generato il nuovo evento.

Fondamentalmente si tratta di polling, ma è un polling in qualche modo intelligente per non surriscaldare il server web.Se Comet non è la tua risposta, sono sicuro che potrebbe essere implementato utilizzando la stessa idea ma utilizzando in modo più estensivo AJAX o codificando in JSON per risultati migliori.Questo è stato progettato prima dell'era AJAX, quindi c'è molto margine di miglioramento.

Se qualcuno può fornire un'implementazione effettiva e leggera di questo, fantastico!

Un'alternativa interessante a Comet è utilizzare i socket in Flash.

Ancora un altro metodo standard lo è SSE (Eventi inviati dal server, noto anche come EventSource, dopo l'oggetto JavaScript).

Comet è stato in realtà coniato da Alex Russell di Dojo Toolkit ( http://www.dojotoolkit.org ).Ecco un collegamento per ulteriori informazioni http://cometdproject.dojotoolkit.org/

Esistono altri metodi.Non sono sicuro che siano "migliori" nella tua situazione.Potresti avere un'applet Java che si connette al server al caricamento della pagina e attende che il materiale venga inviato dal server.Sarebbe un po' più lento all'avvio, ma consentirebbe al browser di ricevere dati dal server su base poco frequente, senza polling.

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

È possibile ottenere ciò a cui miri attraverso l'uso di connessioni http persistenti.

Dai un'occhiata a Articolo sulla cometa su Wikipedia, è un buon punto di partenza.

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

Potrebbe valere la pena di provarlo Server Meteora che è un server web progettato per COMET.Carino demo ed è utilizzato anche da twitterfall.

Una volta aperta una connessione al server, è possibile mantenerla aperta e il server può eseguire il push dei contenuti molto tempo fa, come ho fatto con using 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 un push non inviando intestazioni di contenuto invariate ma lasciando la connessione aperta ma non l'ho mai fatto.

Potresti provare il nostro Componente della cometa - anche se lo è estremamente sperimentale...!

per favore controlla questa libreria https://github.com/SignalR/SignalR sapere come inviare dinamicamente i dati ai client non appena diventano disponibili

Puoi anche esaminare Pushlet Java se stai usando pagine jsp.

Potrebbe voler dare un'occhiata HTTP inverso Anche.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top