13-05-2012, 10:30 AM
(Modification du message : 13-05-2012, 10:32 AM par Sephi-Chan.)
Le push permet d'envoyer des informations depuis le serveur vers les clients. Pour cela, on utilise un serveur tiers (comme Juggernaut, Faye et plein d'autres, ainsi que des services tels que PubNub ou Pusher, mais c'est souvent moins bien) qui est taillé pour recevoir et de maintenir plusieurs connexions (au contraire d'un serveur Web classique qui est conçu pour des connexions assez courtes).
Le principe est donc qu'une fois sur ta page, les visiteurs établissent une connexion persistente avec ton serveur de push. Ainsi, quand ton application a besoin d'envoyer des données à l'utilisateur, elle n'a qu'à les transmettre au serveur de push qui se charge de les relayer.
Pour savoir à qui envoyer quoi, on utilise souvent la métaphore des canaux : un client peut écouter un ou plusieurs canaux. Par exemple, dans Conquest on Rails, quand un joueur s'inscrit à une partie, je lui fais écouter le canal
Comme tu peux le voir, j'utilise un jeton propre au joueur pour rendre le canal secret : ainsi, si je suis le joueur 2, je ne peux pas écouter les messages destinés au joueur 1 car je ne connais pas son jeton, et donc je ne sais pas quel canal écouter.
À l'inverse, le canal de jeu est publique, n'importe qui peut lancer une écoute dessus (à condition d'en connaître l'ID) car les informations qui y transitent ne sont pas sensibles : tous ceux qui l'écoutent reçoivent la même chose.
Le principe est donc qu'une fois sur ta page, les visiteurs établissent une connexion persistente avec ton serveur de push. Ainsi, quand ton application a besoin d'envoyer des données à l'utilisateur, elle n'a qu'à les transmettre au serveur de push qui se charge de les relayer.
Pour savoir à qui envoyer quoi, on utilise souvent la métaphore des canaux : un client peut écouter un ou plusieurs canaux. Par exemple, dans Conquest on Rails, quand un joueur s'inscrit à une partie, je lui fais écouter le canal
games/:game_id
pour qu'il soit notifier de ce qui se passe sur la partie. Il écoute également le canal players/:player_id/ecret_token
pour ses propres notifications.Comme tu peux le voir, j'utilise un jeton propre au joueur pour rendre le canal secret : ainsi, si je suis le joueur 2, je ne peux pas écouter les messages destinés au joueur 1 car je ne connais pas son jeton, et donc je ne sais pas quel canal écouter.
À l'inverse, le canal de jeu est publique, n'importe qui peut lancer une écoute dessus (à condition d'en connaître l'ID) car les informations qui y transitent ne sont pas sensibles : tous ceux qui l'écoutent reçoivent la même chose.