Tchat en direct - Version imprimable +- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org) +-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38) +--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51) +--- Sujet : Tchat en direct (/showthread.php?tid=366) |
RE: Tchat en direct - srm - 10-01-2011 Je ne pense pas que tu ai fait beaucoup d'effort si tu es vraiment dépassé par ce simple exemple. Où alors il faut remettre en question tes connaissances en programmation. RE: Tchat en direct - Sephi-Chan - 10-01-2011 (10-01-2011, 05:41 PM)Colmea a écrit : Je suis peut-être un boulet mais j'ai du mal à comprendre où se trouve la vraie doc concernant beacon ? Toute la documentation est réunie sur le Developer's Guide. Pour le moment, Beacon ne fournit pas de classes d'accès. Elles sont toutes fournies par la communauté (Cf. Open-source contributions). Comme leur API est une API REST, tout se fait via HTTP, c'est donc très simple d'implémenter les différents appels. En l'occurrence, la classe Beacon (de mon crû, comme expliqué dans l'article) n'implémente qu'une méthode pour publier sur un canal. Le code source de cette classe se trouve dans l'archive, dans le fichier lib/beacon.rb. (10-01-2011, 05:43 PM)Argorate a écrit : Rah, faut pas mal le prendre, c'est juste qu'essai de comprendre que le ruby ne me parle absolument pas! et que tu as pris l'habitude de ne mettre plus que du code ruby, ce qui est bien puisque c'est le langage que tu affectionnes, mais bon je comprend rien a chaque fois que tu en mets donc voilà... Ce qui me met en colère, c'est que tu me parles de faire des efforts alors que tu n'en fais aucun pour lire quelques lignes de Ruby. Enlève tes œillères, sinon tu ne progresseras jamais. Sephi-Chan RE: Tchat en direct - Colmea - 10-01-2011 (10-01-2011, 06:02 PM)Sephi-Chan a écrit : la classe Beacon (de mon crû, comme expliqué dans l'article) n'implémente qu'une méthode pour publier sur un canal. Le code source de cette classe se trouv Autant pour moi, j'avais mal lu :non: J'ai du mal à déchiffrer le Ruby (décidément je trouve sa syntaxe imbuvable, y'a rien à faire ) RE: Tchat en direct - Argorate - 10-01-2011 (10-01-2011, 07:40 PM)Colmea a écrit : J'ai du mal à déchiffrer le Ruby (décidément je trouve sa syntaxe imbuvable, y'a rien à faire ) +1. Moi je disais ça non pas pour embeter, mais pour transcrire du ruby vers le php, ça s'invente pas! Si on ne maitrise pas le langage source, il est hazardeux de trouver l'équivalant en php... m'enfin si c'est pour faire des histoires, faites comme si je n'avais rien dit RE: Tchat en direct - Sephi-Chan - 10-01-2011 J'vais reprendre le code de cette classe point par point. D'abord l'ensemble, pour être sûr qu'on parle de la même chose.
Commençons par le début :
Notre classe va utiliser d'autres classes. On n'est pas sûr qu'ils soient déjà inclus, dans le doute, on charge ces classes (la méthode require est protégée contre les inclusions multiples). Ici, j'ai besoin de JSON et de Net::HTTP.
Ici, on génère des accesseurs (writters et readers) pour différentes propriétés. Ça revient à écrire (sauf que cette solution est plus performantes) :
Et ça tu le fais pas en PHP, t'écris (ou tu génères) bêtement tes méthodes, qui prennent de la place inutilement…
Le constructeur de notre classe. Il prend un api_key, une secret_key et une hash d'options. Il donne des valeurs par défaut quand il n'y en a pas. L'équivalent en PHP :
Ah, rien à dire, le Ruby c'est vraiment imbuvable !
Ici, les méthodes qui suivent le mot clé private sont privées. La méthode http est donc privée. Elle instancie un objet Net::HTTP en leur passant host et port. Comme vous pouvez le voir, on n'a défini aucune variable locale host ou port, Ruby va quand même les chercher : il va tenter sa chance en cherchant des méthodes de l'objet qui portent ce nom : et il trouve ! En effet, on a généré des accesseurs et on les a rempli dans le constructeur.
Ici, on a une méthode publish qui prend un channel et des data. On transforme les données en JSON, on génère l'URL du script à appeler. Pour cela, on utilise version, api_key et channel. Comme pour la méthode d'avant, version et api_key appeleront les méthodes de l'objet tandis que channel utilisera la variable locale reçue en argument. Ensuite, on crée une requête HTTP POST. Pour ça par contre, je vous laisse écrire l'équivalent en PHP avec Curl et le poster dans cette discussion. Ces requête doit avoir un header X-Beacon-Secret-Key qui contient la clé secrète. La requête doit également avoir un contenu : ici ce sont nos données à envoyer encodées en JSON et une taille : la longueur du contenu. La méthode renvoie true si le code de la réponse (200, 301, 404, 500, etc.) est situé entre 200 et 299. Sephi-Chan RE: Tchat en direct - Cawrotte - 10-01-2011 Quel travail pour la communauté :o Alors là merci !! RE: Tchat en direct - Kassak - 10-01-2011 Pour ma part, j'ai un minichat qui se refresh tout seul, fait avec du php + ajax. C'est peut être pas le top niveau performance, mais c'est simple et rapide à faire. Tu as ta page avec ton minichat, et une fonction refresh en ajax qui rafraichi le minichat toutes les X secondes (que le minichat pas la page). Et voilà RE: Tchat en direct - Colmea - 10-01-2011 Merci d'avoir pris la peine Sephi. J'ai l'impression d'être un gosse, mais il faut ce qu'il faut :toilette: RE: Tchat en direct - Sephi-Chan - 10-01-2011 Le push est tout aussi simple à mettre en place que la solution en Ajax, alors qu'elle est bien meilleure en terme de performances, de charge serveur et de confort d'utilisation (les messages arrivent un par un, et pas par groupes). Dans un chat en Ajax, il faut deux pages : une page à laquelle on envoie des données et qui les stock en base et une page qui affiche les messages avec du Javascript pour demander le rechargement de cette zone d'affichage. Dans un chat avec push, il faut également deux pages : une page qui envoie les messages au serveur de push (on peut aussi les stocker en complèment) et la page d'affichage, avec le Javascript pour récupérer les messages envoyées par le serveur de push. Et cette simplicité ne fera que s'accentuer quand Beacon proposera directement des classes pour ton langage. Ça peut paraître compliqué au début car c'est une manière nouvelle d'aborder les choses : rappelez-vous quand vous appreniez à utiliser Ajax (et ça l'est toujours pour certains) ! Le problème d'Ajax, c'est que ça affiche les messages par à-coups, donc ça n'est pas très agréable à utiliser, et que ça scale mal lorsque le nombre de joueur augmente : ça va coûter cher au serveur pour… rien. Sephi-Chan RE: Tchat en direct - php_addict - 10-01-2011 (10-01-2011, 09:15 PM)Sephi-Chan a écrit : Le problème d'Ajax, c'est que ça affiche les messages par à-coups, donc ça n'est pas très agréable à utiliser, et que ça scale mal lorsque le nombre de joueur augmente : ça va coûter cher au serveur pour… rien. et pourquoi ne pas faire un chat en php ou autre mais avec l'emplois des sockets ? que pensez vous de ce tuto?: http://www.siteduzero.com/tutoriel-3-10118-comment-utiliser-les-sockets-avec-php-comment-creer-un-chat-avec-les-sockets.html est ce si gourmand que cela en terme de ressources serveur pour un mini chat ? |