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 avere persistent 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

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ù

È stato utile?

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).

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