Reflexions sur un système d'achievements - 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 : Reflexions sur un système d'achievements (/showthread.php?tid=6133) |
RE: Reflexions sur un système d'achievements - srm - 22-05-2012 Qu'est ce qui te manque comme information concernant CouchDB ? http://wiki.apache.org/couchdb/Reference http://wiki.apache.org/couchdb/HTTP_database_API http://wiki.apache.org/couchdb/HTTP_view_API http://wiki.apache.org/couchdb/HTTP_Document_API etc... RE: Reflexions sur un système d'achievements - Maks - 22-05-2012 Ils filent un wrapper pour une implémentation Javascript mais pas un seul exemple d'utilisation. Je m'en suis sorti avec mes fonctions ajax à moi. Le non support des requêtes CORS c'est un vrai problème aussi, et là pas de doc officielle sur le sujet. Les vues c'est pas super intuitif, ni le système de requêtes. Le système de MongoDB est bien meilleur mais ça marche pas de la même manière non plus. RE: Reflexions sur un système d'achievements - Maks - 24-05-2012 Bon quelques bouts de ma solution après plusieurs jours de recherche, si ça intéresse toujours ^^ Sur CouchDB deux databases : - achievements - attribution Exemple de document dans achievement :
Dans attribution
Apache : Décommenter les extensions mod_proxy, rajoute un ProxyPass vers localhost:5984 pour palier à la non gestion des CORS Client : Pour le log j'ai fait grosso modo comme pour la page d'avant. Pour vérifier un succès à débloquer :
Vous noterez l'utilisation de eval(), fonction très controversée mais bien utile si utilisée sciemment finalement... Pour les paramètres passés en argument, j'utilise le petit trick de passer un object {} afin de pouvoir utiliser des paramètres optionnels sans me soucier de l'ordre. Dans la méthode unlock() j'ai une logique de présentation, puis :
On POST vers CouchDB la nouvelle entrée. Bon c'est une fonction ajax() maison, mais avec JQuery ça se présenterait de tête :
On note déjà que le scénario en écriture via requête HTTP c'est pas la panacée si y'a beaucoup d'écritures, comme l'a dit Sephi-Chan. Pour récupérer les données, il faut créer une vue sous CouchDB Pour récupérer tous les achievements
Pour récupérer les attributions
Notez la clé doc.pseudo qui va être très importante Le système de requête par vue est pas super intuitif, j'ai mis du temps à faire ce que je voulais faire, surtout par rapport à ce j'ai pu testé sur MongoDB par exemple. Après cet avis n'engage que moi... Retour côté client
Voilà pour le feedback. En conclusion, à mon avis, CouchDB c'est vraiment top quand on veut faire une appli côté client, avec une vue et un model uniquement. Pour un scénario d'écriture, les requêtes HTTP ça va vite surcharger. Ca me permet aussi de sortir un peu de mes habitudes, et de découvrir le NoSQL. Ca m'a aussi permis de me rendre compte que j'aurais finalement mieux fait d'adopter MongoDB dès le début. Car pour ce que j'en ai lu, ça serait plus rapide que MySQL. De plus je pourrais sortir du JSON, plutôt que de sortir des lignes MySQL et de remplir un objet avec ensuite... D'autant plus que je n'ai jamais besoin de jointures de dingue, et que j'ai rarement plus de 2 clés étrangères. Javascript, Node.JS, MongoDB, Socket.IO, c'est vraiment un éco-système qui se complète avec un point commun : le JSON. RE: Reflexions sur un système d'achievements - srm - 24-05-2012 (22-05-2012, 05:58 PM)Maks a écrit : Ils filent un wrapper pour une implémentation Javascript mais pas un seul exemple d'utilisation. C'est quoi CORS ? :o Et vu que ce sont des banales requêtes HTTP à faire, à toi de coder en Javascript avec des appels Ajax comme tu veux, ils font des clients pour plein de langages, mais je m'en sers quasiment jamais tant c'est inutile. Les requêtes HTTP si tu as beaucoup d'update peut sembler un frein, en pratique pas du tout, à part si tu as des besoins de performances accrus (mais on est pas Facebook ou je ne sais qui ^^) Tu peux faire des bulk opérations : http://wiki.apache.org/couchdb/HTTP_Bulk_Document_API A la fois récupérer plusieurs documents avec une requête, ou en modifier/insérer plusieurs avec une requête. Ok pour CORS, il te suffit de mettre un Apache en Proxy qui ajoute l'header et rulez De toute façon ils recommandent toujours de délivrer CouchDB via une autre couche, par exemple un Apache, un Varnish ou autre. RE: Reflexions sur un système d'achievements - Maks - 24-05-2012 Oui dans cas cas précis, à moins d'avoir 10 000 joueurs, ma requête POST ne devrait pas peser très lourd ^^ Les requêtes CORS c'est une sécurité quand tu veux accéder à des données situées sur un autre serveur, ou un autre port via AJAX. Ici donc le port 5984. Mais pas moyen d'ajouter un header à CouchDB donc oui via Apache j'ai rajouté comme je l'ai dis dans le feedback : Code : ProxyPass /couchDB http://127.0.0.1:5984/ D'autant plus que Opera ne supporte pas les CORS (alors que même IE8 peut le faire !!), la solution du proxy est vraiment sympa. |