28-12-2011, 03:27 PM
(Modification du message : 28-12-2011, 03:33 PM par Sephi-Chan.)
Les solutions de push sont généralement composées de trois éléments.
Le plus souvent, on ne raisonne pas en destinataire mais en terme de canaux. Et les navigateurs vont en fait attendre des messages sur des canaux (on parle alors de listen ou de subscribe). L'astuce est ensuite d'avoir un canal par utilisateur et d'autres plus génériques.
Pour cela, on va définir des conventions. Par exemple, le canal de l'utilisateur 1 s'appellera "users/1", le canal pour tout le monde s'appellera "users", etc.
Pour que le navigateur se connecte au bon canal, on va donc écrire du Javascript qui aura conscience des canaux à écouter. Pour cela, il suffit de transmettre le nom des canaux au Javascript.
Quand je génère mon HTML, j'ai le droit de mettre du code Javascript dedans, par exemple.
Ensuite, dans les fichiers Javascript de notre application, on peut faire (avec Juggernaut) :
Et voilà ! Si tu as compris ça, on pourra aller plus loin : j'expliquerai comment envoyer des informations sur ces canaux.
Mais mieux vaut y aller petit à petit et déjà encaisser ça.
- Un serveur de push qui tourne en plus du serveur Web classique de l'application.
- Un client côté client. C'est un script Javascript qu'on charge dans le navigateur du joueur. Ce client va établir une connexion avec le serveur de push selon le meilleur protocole de communication disponible sur le navigateur.
- Un client côté serveur. C'est généralement une classe qui va permettre côté serveur d'envoyer des informations aux serveurs de push (quelles données et à qui les envoyer). Le serveur de push les enverras à son tour aux navigateurs connectés à lui.
Le plus souvent, on ne raisonne pas en destinataire mais en terme de canaux. Et les navigateurs vont en fait attendre des messages sur des canaux (on parle alors de listen ou de subscribe). L'astuce est ensuite d'avoir un canal par utilisateur et d'autres plus génériques.
Pour cela, on va définir des conventions. Par exemple, le canal de l'utilisateur 1 s'appellera "users/1", le canal pour tout le monde s'appellera "users", etc.
Pour que le navigateur se connecte au bon canal, on va donc écrire du Javascript qui aura conscience des canaux à écouter. Pour cela, il suffit de transmettre le nom des canaux au Javascript.
Quand je génère mon HTML, j'ai le droit de mettre du code Javascript dedans, par exemple.
<script type="text/javascript">
window.currentUserId = <?php echo $current_user->getId(); ?>;
</script>
Ensuite, dans les fichiers Javascript de notre application, on peut faire (avec Juggernaut) :
jQuery(function(){
// On définit une variable global Juggernaut une seule fois : Inutile
// d'instancier la classe à chaque fois, on conserve la même instance.
window.juggernaut = (window.juggernaut || new Juggernaut());
// On détermine le nom du canal réservé à notre utilisateur.
var userChannel = "users/" + window.currentUserId
// On s'inscrit au canal de l'utilisateur et on donne une fonction qui sera
// appelée à chaque fois que des données sont envoyées sur ce canal.
juggernaut.subscribe(userChannel, function(data){
console.log("New confidential data received!", data);
});
// Et on peut s'inscrire à d'autres canaux. Ici le canal commun.
juggernaut.subscribe("users", function(data){
console.log("New public data received!", data);
});
});
Et voilà ! Si tu as compris ça, on pourra aller plus loin : j'expliquerai comment envoyer des informations sur ces canaux.
Mais mieux vaut y aller petit à petit et déjà encaisser ça.