Besoin d'aide avec la mise en place du code comète
-
24-09-2019 - |
Question
Quelqu'un sait-il de façon ou penser peut-être il est possible de se connecter avec Node.js Nginx http module de pression pour maintenir une connexion permanente entre le client et le navigateur.
Je suis nouveau à la comète si juste ne comprennent pas la publication, etc peut-être quelqu'un peut me aider.
Ce que j'ai mis en place est à ce jour ce qui suit. J'ai téléchargé le plug-in jQuery.comet et mis en place le code de base suivant:
JavaScript Client
<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>
Ce que je peux comprendre de tout cela est que le client va continuer à écouter l'URL suivie / diffusion / sub = getit. Quand il y a un message, il se déclenche updateFeed.
Assez basique et compréhensible de l'OMI.
Nginx http module de configuration push
application default_type / octet-stream; sendfile sur; keepalive_timeout 65; push_authorized_channels_only off;
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 maintenant cela indique nginx écouter sur le port 80 pour les appels à / diffusion / sous et restituera toutes les réponses envoyées à / diffusion / pub.
Jolie également de base. Cette partie n'est pas si difficile à comprendre, et il est bien documenté sur Internet. La plupart du temps il y a un rubis ou un fichier php derrière ce qui fait la diffusion.
Mon idée est d'avoir Node.js
/broadcast/pub
de radiodiffusion. Je pense que cela va me laisserpersistent streaming data
du serveur au client sans interrompre la connexion. J'ai essayé l'approche à long sondage avec boucle la demande mais je pense que ce sera plus efficace.
Ou est-ce pas aller travailler.
fichier Node.js
pour créer les Node.js je suis perdu. Tout d'abord je ne sais pas comment avoir Node.js de travailler de cette façon.
La configuration je pour le vote à long est la suivante:
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);
Cette écoute sur le port 8000 et écrit uniquement sur la variable de réponse.
Pour ma longue interrogation nginx.config
regardé quelque chose comme ceci:
server {
listen 80;
server_name _;
location / {
proxy_pass http://mydomain.com:8080$request_uri;
include /etc/nginx/proxy.conf;
}
}
juste redirigé le port 80 pour 8000 et cela a bien fonctionné.
Est-ce que quelqu'un a une idée sur la façon d'avoir Node.js agir d'une manière Comet comprend. Ce serait vraiment sympa et vous me aider beaucoup.
Recources
utilisé
- Un exemple où cela est fait avec rubis au lieu de Node.js
- jQuery.comet
- HTTP Nginx page d'accueil du module push
- Faye: un client Comet et serveur pour Node.js et rack
Pour utiliser faye Je dois installer le client comète, mais je veux utiliser celui fourni avec Nginx. C'est pourquoi je ne pas seulement utiliser faye. Celui nginx utilise est beaucoup plus optimzed.
supplémentaire
La solution
votre lien il me semble que tout pub / sous travail est effectué par Nginx, le code Ruby est utilisé uniquement pour tester et envoyer des messages. Les clients utilisent encore long polling:
Dans le script ci-dessus, toutes les cinq secondes un éditeur émet un nouvel événement à notre serveur Nginx, qui à son tour, pousse les données à deux abonnés qui ont des liens de longue interrogation ouvert et attendent Les données. Une fois que le message est envoyé à chaque abonné, Nginx ferme les connexions et les clients alors immédiatement les rétablir pour attendre le prochain message disponible.
Nginx sert aussi simple retranslator pour les messages (configuration très intelligent BTW, merci pour le lien).
Pour faire court: les navigateurs ne sont pas capables de ce genre de connexion que vous essayez de faire. C'est ce que WebSockets ont été inventées pour.
Plus tard, je vais faire un peu de code dans Node.js d'utiliser cette configuration avec Nginx (Je suis intéressé aussi).