Hai bisogno di aiuto con la creazione di codice cometa
-
24-09-2019 - |
Domanda
Qualcuno sa fuori un modo o forse pensa che la sua possibile collegare Node.js con modulo http spinta Nginx per mantenere una connessione permanente tra il client e browser.
Sono nuovo di cometa quindi proprio non capisco la pubblicazione ecc forse qualcuno mi può aiutare con questo.
Quello che ho creato finora è la seguente. Ho scaricato il plug-in jQuery.comet e impostare il seguente codice di base:
client JavaScript
<script type="text/javascript">
function updateFeed(data) {
$('#time').text(data);
}
function catchAll(data, type) {
console.log(data);
console.log(type);
}
$.comet.connect('/broadcast/sub?channel=getIt');
$.comet.bind(updateFeed, 'feed');
$.comet.bind(catchAll);
$('#kill-button').click(function() {
$.comet.unbind(updateFeed, 'feed');
});
</script>
Quello che posso capire da questo è che il cliente continuerà ad ascoltare l'url seguito da / broadcast / sub = Getit. Quando c'è un messaggio che verrà fuoco updateFeed.
Piuttosto semplice e comprensibile IMO.
Nginx http spingere modulo di configurazione
applicazione default_type / octet-stream; sendfile su; keepalive_timeout 65; push_authorized_channels_only spento;
server {
listen 80;
location /broadcast {
location = /broadcast/sub {
set $push_channel_id $arg_channel;
push_subscriber;
push_subscriber_concurrency broadcast;
push_channel_group broadcast;
}
location = /broadcast/pub {
set $push_channel_id $arg_channel;
push_publisher;
push_min_message_buffer_length 5;
push_max_message_buffer_length 20;
push_message_timeout 5s;
push_channel_group broadcast;
}
}
}
Ok ora questo dice nginx di ascoltare sulla porta 80 per le chiamate verso / broadcast / sub e vi darà di nuovo tutte le risposte inviate a / broadcast / pub.
Piuttosto semplice anche. Questa parte non è così difficile da capire, ed è ben documentato su Internet. La maggior parte del tempo v'è un rubino o di un file php dietro questo che fa la trasmissione.
La mia idea è quella di avere node.js radiodiffusione
/broadcast/pub
. Penso che questo mi permette di averepersistent streaming data
dal server al client senza interrompere la connessione. Ho provato l'approccio a lungo polling con looping la richiesta, ma credo che questo sarà più efficiente.
O è questo non andare a lavorare.
Node.js file
Ora per creare le Node.js Mi sono perso. Prima di tutto non so come avere node.js a lavorare in questo modo.
La configurazione che ho usato per molto tempo di polling è la seguente:
var sys = require('sys'),
http = require('http');
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/html'});
res.write(new Date());
res.close();
seTimeout('',1000);
}).listen(8000);
Questa ascolto sulla porta 8000 e appena scrive sulla variabile di risposta.
Per polling lungo il mio nginx.config
sembrava qualcosa di simile:
server {
listen 80;
server_name _;
location / {
proxy_pass http://mydomain.com:8080$request_uri;
include /etc/nginx/proxy.conf;
}
}
Questo semplicemente reindirizzato la porta 80 per 8000 e questo bel funzionato.
Qualcuno ha un'idea su come avere Node.js agire in modo Comet capisce. Sarebbe veramente bello e mi aiuterai fuori un sacco.
Recources
utilizzato
- Un esempio in cui questo viene fatto con il rubino al posto di Node.js
- jQuery.comet
- Nginx HTTP spingere modulo homepage
- Faye: un client e un server Comet per Node.js e Rack
Per usare Faye devo installare il client cometa, ma voglio utilizzare quello fornito con Nginx. Ecco perché non mi basta usare Faye. Gli usi uno nginx è molto più optimzed.
più
Soluzione
tuo link mi pare che tutto il lavoro pub / sub è fatto da Nginx, codice Ruby viene utilizzato solo per testare e inviare messaggi. I clienti utilizzano ancora polling lungo:
Nello script precedente, ogni cinque secondi un editore emette un nuovo evento al nostro server Nginx, che a sua volta, spinge i dati di due abbonati che hanno collegamenti a lunga elettorali aprono e sono in attesa di dati. Una volta che il messaggio viene inviato a ciascun abbonato, Nginx chiude le loro connessioni e dei clienti poi subito li ristabilire per aspettare la prossima informazione disponibile.
Nginx funge da semplice retranslator per i messaggi (impostazione molto intelligente proposito, grazie per il link).
Per dirla breve: i browser non sono in grado per questo tipo di connessione che si cerca di fare. Questo è ciò che WebSockets sono stati inventati per.
Più tardi farò un po 'di codice nella Node.js Per usare questa impostazione con Nginx (Mi interessa troppo).