Domanda

Web sockets, quando utilizzato in tutti i browser web fare ajax obsoleti?

Causa se non ho potuto usare i socket web di recuperare i dati e aggiornamento dati in tempo reale, perché avrei bisogno di ajax?Anche se io la uso di ajax per recuperare solo i dati una sola volta all'avvio dell'applicazione mi potrebbe desiderare di vedere se questa data è stato modificato dopo un po'.

E web sockets essere possibile in croce domini o solo per la stessa origine?

È stato utile?

Soluzione

WebSockets non farà AJAX del tutto obsoleti e WebSockets può fare cross-domain.

AJAX

AJAX meccanismi può essere utilizzato con un normale server web.Al suo livello più elementare, l'AJAX è solo un modo per una pagina web per effettuare una richiesta HTTP.WebSockets è un livello molto più basso di protocollo e richiede un WebSockets server integrato nel webserver, autonomo, o inoltrata dal server web, un server stand-alone).

Con WebSockets, l'inquadratura e il carico è determinato dall'applicazione.Si potrebbe inviare HTML/XML/JSON e indietro tra client e server, ma non si è costretti. AJAX è HTTP.WebSockets ha un HTTP cordiale stretta di mano, ma WebSockets non è HTTP.WebSockets è un bi-direzionale protocollo che è più vicino al socket di tipo raw (volutamente così) che è HTTP.I WebSockets dati del payload è codificato UTF-8 nella versione attuale della norma, ma questo è suscettibile di essere modificato/ampliato nel future versioni.

Quindi ci sarà sempre un posto per AJAX tipo di richieste, anche in un mondo in cui tutti i client supportano WebSockets in modo nativo.WebSockets sta cercando di risolvere le situazioni in cui l'AJAX non è in grado o marginalmente in grado (perché WebSockets la sua bi-direzionale e molto più basso overhead).Ma WebSockets non sostituire tutto l'AJAX è utilizzato per.

Cross-Domain

, WebSockets supporta il cross-domain.Il contatto iniziale per impostare la connessione comunica origine politica di informazione.La pagina di wikipedia mostra un esempio di una tipica stretta di mano: http://en.wikipedia.org/wiki/WebSockets

Altri suggerimenti

Cercherò di rompere questo giù in domande:

Web sockets, quando utilizzato in tutti i browser web fare ajax obsoleti?

Assolutamente no.I websocket sono i raw socket connessioni al server.Questo viene fornito con proprio i problemi di sicurezza.Chiamate AJAX sono semplicemente async.Le richieste HTTP che possono seguire le stesse procedure di convalida, come il resto delle pagine.

Causa se non ho potuto usare i socket web di recuperare i dati e aggiornamento dati in tempo reale, perché avrei bisogno di ajax?

Utilizzare AJAX per il più semplice e più gestibile attività.Non tutti vogliono avere il sovraccarico di assicurare una presa di connessione per consentire async richieste.Che può essere gestito in modo abbastanza semplice.

Anche se io la uso di ajax per recuperare solo i dati una sola volta all'avvio dell'applicazione mi potrebbe desiderare di vedere se questa data è stato modificato dopo un po'.

Certo, se la modifica di dati.Non si dispone di dati, la modifica o l'aggiornamento costante.Di nuovo, questo è codice overhead che si deve tener conto.

E web sockets essere possibile in croce domini o solo per la stessa origine?

Si può avere la croce di dominio WebSockets, ma è necessario il codice WS server per accettare loro.Si ha accesso al dominio (host) un colpo di testa che è possibile utilizzare per accettare / rifiutare le richieste.Questo può, tuttavia, essere contraffatta da qualcosa di semplice come nc.Per davvero sicura la connessione è necessario autenticare la connessione con altri mezzi.

WebSockets hanno un paio di grandi svantaggi in termini di scalabilità che evita ajax. Dal momento che ajax invia una richiesta / risposta e chiude la connessione (..o poco dopo) se rimane qualcuno sulla pagina web non utilizza le risorse del server al minimo. WebSocket sono destinati a tornare flusso di dati al browser, e si bloccano risorse del server per farlo. I server hanno un limite a quante connessioni simultanee possono mantenere aperte in una sola volta. Per non parlare a seconda della tecnologia lato server, essi possono impegnare un thread per gestire la presa. Così WebSockets hanno requisiti intensivi di più risorse per entrambe le parti per connessione. Si potrebbe facilmente esaurire tutte le vostre discussioni a servizio clienti e quindi non nuovi clienti potrebbero venire in se molti utenti stanno semplicemente seduti sulla pagina. Questo è dove nodejs, VertX, Netty può davvero dare una mano, ma anche quelli che hanno limiti superiori pure.

Inoltre c'è la questione dello stato della presa di fondo, e scrivere il codice su entrambi i lati che portano avanti la conversazione con stato che non è qualcosa che devi fare con AJAX stile perché è apolide. WebSockets richiedono la creazione di un protocollo di basso livello che si risolve per voi con l'Ajax. Cose come battito del cuore, chiudendo le connessioni inattive, riconnessione in caso di errori, ecc sono di vitale importanza ora. Queste sono cose che non devono risolvere quando si utilizza AJAX perché era senza stato. Stato è molto importante per la stabilità della vostra applicazione e soprattutto la salute del vostro server. Non è banale. Pre-HTTP abbiamo costruito un sacco di protocolli TCP stateful (ftp, telnet, SSH), e quindi HTTP è accaduto. E nessuno ha fatto quella roba tanto più perché, anche con i suoi limiti HTTP è stato sorprendentemente facile e più robusto. WebSockets riportare il bene e il male di protocolli stateful. Imparerete presto se non si ottiene una dose di quell'ultimo andare in giro.

Se avete bisogno di streaming di dati in tempo reale questo overhead aggiuntivo è giustificato perché il polling del server per ottenere i dati in streaming è peggio, ma se tutto quello che sta facendo è utente interaction-> request-> response-> aggiornamento dell'interfaccia utente, quindi è più facile ajax e userà meno risorse perché una volta che la risposta viene inviata la conversazione è finita e senza risorse server aggiuntivi vengono utilizzati. Quindi penso che si tratta di un compromesso e l'architetto deve decidere quale strumento si adatta il loro problema. AJAX ha il suo posto, e WebSockets hanno il loro posto.

Aggiorna

Quindi, l'architettura del server è ciò che conta quando si parla di discussioni. Se si utilizza un server tradizionalmente multi-threaded (o processi) in cui una connessione ogni presa prende il proprio thread per rispondere alle richieste, allora WebSockets importa molto a voi. Quindi, per ogni connessione che abbiamo un socket, e, infine, il sistema operativo cadere se si dispone di troppi di questi, e lo stesso vale per le discussioni (a maggior ragione per i processi). Le discussioni sono più pesanti zoccoli (in termini di risorse) e quindi siamo cercare di conservare il numero di thread che abbiamo in esecuzione contemporaneamente. Ciò significa creare un pool di thread che è solo un numero fisso di thread che è condivisa tra tutti gli zoccoli. Ma una volta presa si apre il filo viene utilizzato per l'intera conversazione. La lunghezza di quelle conversazioni governa quanto velocemente si può riutilizzare quei fili per nuovi socket in arrivo. La lunghezza dei vostri governa conversazione quanto si può scalare. Tuttavia, se si esegue il flusso questo modello non funziona bene per il ridimensionamento. Devi rompere il filo / progettazione presa.

modello richiesta / risposta

di HTTP rende molto efficiente nel ribaltamento fili per nuovi socket. Se sono solo intenzione di utilizzare richiesta uso / risposta HTTP sua già costruito e molto più facile di quanto reimplementare qualcosa di simile a WebSockets.

Dal momento che WebSockets non devono essere richiesta / risposta HTTP e possono trasmettere dati se il server dispone di un numero fisso di thread nel suo pool di thread e si ha lo stesso numero di WebSockets tying backup di tutti i thread con conversazioni attive, non si può servire nuovi clienti in arrivo! Hai raggiunto la capacità massima. Ecco dove il design protocollo è importante anche con WebSockets e fili. Il protocollo potrebbe consentire di allentare il filo per socket per modello conversazione che modo le persone appena seduto lì non si utilizza un thread sul vostro server.

Ecco dove asincroni server singolo thread entrano. In Java che spesso chiamiamo questo NIO per non-blocking IO. Ciò significa che è un'API differente per prese dove inviare e ricevere dati non blocca il thread esegue la chiamata.

Quindi, tradizionale nel bloccare i socket quando si chiama socket.read () o socket.write () aspettano fino a quando i dati vengono ricevuti o inviati, prima di restituire il controllo al programma. Ciò significa che il programma è in attesa bloccato per i dati presa di entrare o uscire fino a quando si può fare altro. Ecco perché abbiamo le discussioni in modo che possiamo fare il lavoro contemporaneamente (allo stesso tempo). Invia i dati al client X mentre aspetto su dati provenienti da client Y. convergenze è il nome del gioco quando si parla di server.

In un server NIO si usa un singolo thread per gestire tutti i clienti e registrare i callback per essere avvisati quando arrivano i dati. Ad esempio

socket.read( function( data ) {
   // data is here! Now you can process it very quickly without waiting!
});

La chiamata socket.read () restituirà immediatamente senza leggere i dati, ma la nostra funzione che abbiamo previsto sarà chiamato quando entra in. Questo design cambia radicalmente il modo di costruire e architetto codice perché se si ottiene appeso in attesa di qualcosa che non è possibile ricevere tutti i nuovi clienti. Si dispone di un singolo thread non si può davvero fare due cose in una volta! Devi tenere che un thread in movimento.

NIO, Asynchronous IO, programma basato evento come questo è tutto noto come, è un progetto di sistema molto più complicato, e non vorrei suggerire di provare a scrivere questo se si è agli inizi. Anche i programmatori molto anziani trovano molto difficile costruire un sistema robusto. Dal momento che sono asincrona non è possibile chiamare le API di quel blocco. Come leggere i dati dal DB o l'invio di messaggi ad altri server dovrà essere effettuata in modo asincrono. Anche la lettura / scrittura dal file system può rallentare il tuo thread singolo giù abbassare la scalabilità. Una volta che vai asincrono è tutto asincrono tutto il tempo se si desidera mantenere il singolo movimento thread. Ecco dove si ottiene impegnativo perché alla fine si incorrerà in un'API, come DB, che non è asincrona e si deve adottare più thread a un certo livello. Quindi un approccio ibrido sono comuni anche nel mondo asincrono.

La buona notizia è che ci sono altre soluzioni che utilizzano questa API di livello inferiore già costruito che è possibile utilizzare. NodeJS, VertX, Netty, Apache Mina, gioca Framework, Contorto Python, Stackless Python, ecc Ci potrebbe essere qualche libreria oscura per C ++, ma onestamente non mi preoccuperei. tecnologia server non richiede le lingue molto più veloci perché è IO legato più di CPU. Se sei un Die Hard uso dado prestazioni Java. Ha una grande comunità di codice per tirare da e la sua velocità è molto vicino (e talvolta migliore) di C ++. Se basta odio andare con nodo o Python.

Sì, sì lo fa. : D

Le risposte precedenti mancano di immaginazione. Non vedo alcun motivo in più per utilizzare AJAX se WebSocket sono a vostra disposizione.

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