2012-07-27 8 views

risposta

18

Hai due opzioni (che altri hanno descritti sopra). Nel caso in cui non hai familiarità con alcune delle idee concettuali dietro ogni opzione, ho pensato di dargli una o due righe su di esse. Si noti che sto presentando questi concetti ad un livello molto, molto alto.

I suoi tre opzioni sono:

  1. breve Polling
  2. Web Socket
  3. Comet/Long-Polling

Polling Breve

Breve Polling supera quello la comunicazione tra client e server forzando il client di inviare continuamente le richieste al server della forma:

Client: Do you have a message for me? 
Server: No. 
Client: (wait x seconds) 
Client: Do you have a message for me? 
Server: No. 
Client: (wait x seconds) 
Client: Do you have a message for me? 
Server: Yes. Here it is! 
Client: Yay! 
Client: (update message) 

il fastidioso costante per conto del Cliente è chiamato Polling. Per implementare questa struttura, è necessario configurare il server in modo che "ascolti" queste richieste di polling dal client.Il server dovrà anche memorizzare quei messaggi da qualche parte, in modo che quando i messaggi siano pronti, il server possa consegnarli. Ad altissimo livello semplicistico, il server ha bisogno di:

  • Accetta generale Web richiede
  • Accetta polling richiede
  • lavori Run background che recuperano i messaggi
  • memorizzare questi messaggi da qualche parte in modo che quando le richieste di polling entra, il server può controllarli.

È inoltre necessario associare queste richieste di polling a un tipo di ID sessione per l'utente, in modo che i messaggi giusti raggiungano la persona giusta. Nel complesso, il paradigma è complicato e, a mio parere, inefficiente.

Sockets Web

Sockets Web sono nuovi per HTML5. L'idea alla base è che il Cliente può mantenere una connessione diretta al server e può inviare le informazioni tra loro avanti e indietro. Pertanto, invece del solito: i client inviano richieste GET >> Server risponde con il contenuto, Web Sockets consentono di mantenere un dialogo continuo.

Per impostare questa funzione, tuttavia, è necessario:

  • Browser che sono WebSocket compatibile (non tutti sono).
  • Un server in grado di gestire socket Web (non si sa come articolare questo, ma non tutti i server sono configurati per questo tipo di arrangiamento).

L'installazione è un po 'complicato, anche se più semplice di polling lungo:

  • client mantiene il collegamento alla connessione Web-Socket-permesso di Server
  • Server spinge risultati al client tramite presa web
  • Pagina di aggiornamenti del client in base ai risultati

You'l Vedo questo modello denominato Notifiche push (certamente, se possiedi un iPhone che hai riscontrato) dato che il server è stato abilitato a spingere "roba" al client (che scortese!). Dato che ci sono molte sfumature client e server, ti consiglio di provare qualcosa come Pusher, che è fondamentalmente un servizio web per gestire tutte le parti difficili di Web Sockets. Sarà un modo semplice per testare e giocare con il modello prima di iniziare a configurarlo da solo. Ha sia librerie client che server-side.

Spero che le informazioni forniscano una base per risolvere il problema. Le altre risposte hanno più informazioni dirette su come risolvere ogni scenario.

Comet/Long-Polling

Un'alternativa, apparentemente approccio cross-browser per Web Sockets è Long-Polling (vedi Comet). In questo caso, il client stabilisce una connessione al server e lo lascia sospeso, in attesa che i dati vengano respinti.L'installazione per questo è un po 'complicata, ma rappresenta una via di mezzo tra Polling breve e Socket Web.

0

È possibile utilizzare un sondaggio, sondaggio lungo o se si desidera un sistema push. Il più semplice sarebbe un sondaggio. Tuttavia, tutte le soluzioni richiedono la codifica lato client.

L'impatto sulle prestazioni dipende dalla soluzione. Il più facile da implementare sarebbe un sondaggio. Un sondaggio a bassa frequenza fa effettivamente una richiesta ogni, diciamo 100 ms o simula il tempo reale. Un sondaggio a lungo termine avrebbe un impatto minore, ma manterrebbe molte richieste in un tempo più o meno lungo.

0

Jetty

Ajax Push Engine

Socket.io

Questi sono modi per implementare Comet

Suggerirei Socket.io, che viene realizzato con Node.js

perché sfrutta utilizzare il miglior metodo di connessione disponibile

5

Suggerirei di implementare una connessione socket come SockJS o Socket.io come libreria JavaScript lato client e quindi utilizzare Tornado sul lato server per pubblicare eventuali modifiche di stato al client. Il codice è abbastanza semplice.

Il codice lato client dipende dalla libreria scelta. SockJS o SocketIO. O se si desidera utilizzare WebSockets direttamente E 'molto semplice: codice lato

update_socket = new WebSocket("ws://my_server.com/listening_url"); 
update_socket.onmessage = function (evt) { 
    $("#my_div").html(evt); 
}; 

Il server è anche abbastanza semplice:

import tornado 

class UpdateHandler(tornado.websocket.WebSocketHandler): 

    def open(self): 
     self.write_message('Hi client') 
     # listen for some events that are occurring 
     for message in function_that_generates_events(): 
      self.write(message) 

    def on_message(self, message): 
     # Do something with incoming messages 

    def on_close(self): 
     # tidy up 

app = tornado.web.Application(('r/listening_url',UpdateHandler)) 
app.listen(9000) 
Problemi correlati