Serveur minecraft

Utilisation de Microsoft Azure pour le serveur de votre jeu – Monter un serveur MineCraft

Le 27 juin 2019 - 13 minutes de lecture

Ce message est en fait venu par accident. J’ai joué avec la suite Kendo UI récemment ouverte de Telerik et j’ai eu besoin d’un back-end Web. Bien sûr, j'aurais pu utiliser mon propre serveur, mais chaque fois que vous agissez de la sorte, vous vous exposez à un autre problème de sécurité potentiel. Il y a bien longtemps, j'ai fait un tutoriel HTML5 dans lequel j'ai utilisé une version gratuite de l'hébergement Heroku Node et un back-end CouchDB, mais la vérité est que c'était un peu pénible. Cette fois, j'ai décidé d'examiner l'état d'Azure et de voir s'il s'agissait d'une option appropriée.

Alors, qu'est-ce qu'Azure? Eh bien, c'est une chose confuse à laquelle répondre. Il s’agit essentiellement de l’offre ____________ de Microsoft en tant que service. Dans ___________, vous pouvez insérer les mots plateforme, base de données, cloud, etc. Fondamentalement, il s'agit d'un certain nombre d'offres basées sur le cloud, allant d'un hébergement directement basé sur une machine virtuelle, comme Amazon 2, à un serveur SQL basé sur un cloud. Ce qui nous intéresse le plus ici, c'est «Mobile», qui est un back-end évolutif pour les logiciels et les sites Web mobiles. C'est une façon pour vous de déployer votre code sur le cloud et de laisser quelqu'un d'autre se soucier de l'infrastructure, de la mise à l'échelle, des sauvegardes, etc. Il ressemble beaucoup aux solutions telles que Heroku et Google App Engine. et en utilisant une solution de jeu prédéfinie.

Cet article porte sur Azure pour les jeux mobiles ou HTML5 plus petits. Des choses comme les tableaux de bord, le jumelage, les sauvegardes dans le nuage, ce genre de chose. Si vous envisagez de créer un jeu lourd comme un MMO, vous devez regarder ailleurs, comme ici.

Alors, pourquoi Azure Mobile?

  • pas de serveur à maintenir
  • mise à l'échelle facile
  • un niveau gratuit est disponible pour commencer
  • c’est très bon marché (terme relatif bien sûr)
  • c’est Microsoft. Ils ont littéralement dépensé des milliards pour créer des serveurs. La bande passante et la disponibilité ne devraient jamais être un problème
  • ce n'est pas Google. Chaque fois que j'utilise une technologie Google comme App Engine, je veux frapper un âne
  • JavaScript et maintenant, backends C #
  • Prise en charge de l'outillage Visual Studio
  • Authentification et notifications intégrées (Google, Twitter, MS, Facebook, etc.). Normalement, un énorme point de douleur
  • Aussi difficile que cela puisse paraître, ils sont probablement meilleurs en sécurité que vous

Pourquoi pas?

  • JavaScript / C # seulement… veux Rails par exemple, Mobile n'est pas pour vous
  • Peut être déroutant comme l'enfer. La documentation n'est pas aussi bonne qu'elle devrait l'être
  • Visual Studio… certaines personnes le détestent. Il est clairement plus facile de travailler dans VS, mais VS peut être une bête décourageante.
  • C’est Microsoft, pour certaines personnes, c’est un très mauvais point négatif.
  • Moins de contrôle

Alors… les coûts?

La première chose que vous devez vous rendre sur http://azure.microsoft.com/ et vous inscrire. Un petit avertissement, vous devez vous inscrire et donner une carte de crédit valide, mais vous n’avez rien à payer. Lorsque vous y êtes invité, sélectionnez un plan Pay As You Go. Oh oui, les coûts, comme parler de ça pendant une minute:

Curieusement, le changement de région n'a aucun effet sur le prix. Vous pouvez donc commencer gratuitement jusqu'à 1/2 million d'appels par mois à partir de 500 appareils et pour un total de 20 Mo de données. Au niveau gratuit, vous pouvez avoir jusqu’à 10 «services» différents, ce qui, pour un service, peut comporter des tonnes d’appels d’API, n’est pas vraiment une limite majeure.

Lorsque vous passez au niveau «paye», vous vous retrouvez avec 27 $ par mois par «unité». Une unité est une unité de calcul théorique, pour laquelle je ne pouvais pas trouver la définition de (dans Amazon, elle est strictement définie, par exemple, comme un cœur de 1,7 GHz, 768 Mo de RAM, etc.). Les appels d'API sont triplés jusqu'à 1,5M par unité. Comme vous pouvez le constater, le niveau BASIC est le premier qui vous permet d’améliorer les performances si nécessaire. Donc, si votre site est claqué, vous pouvez augmenter la puissance de traitement jusqu'à 6 fois la base. L'aspect le plus important est peut-être qu'il n'y a plus de limite d'appareils… donc si vous avez 10 utilisateurs ou 10 millions, le même prix pour vous. Standard 10X essentiellement les ressources mais à environ 8X le prix.

Alors, qu'en est-il des coûts de données? 20MB est évidemment une petite somme, quel est ce coût? C'est assez simple aussi:

Donc, en gros, plus de 20 Mo et moins de 100 Mo, 5,27 dollars par mois. Ensuite, 5,27 USD supplémentaires pour augmenter ce plafond à un Go, puis, en gros, une réduction du montant pour chaque Go supplémentaire à mesure que vous en rajoutez, pour finalement atteindre environ 1 USD par Go. Il est délicat d’essayer de comparer directement les prix avec Amazon, car la facture est d’une tout autre manière. Par exemple, le stockage de leur hébergement MySQL RDS n’est que de 12,5 centimes par Go. toutefois vous payez pour le traitement, les transactions, etc. Franchement, c’est la confusion des prix chez Amazon qui m’a amené à choisir SoftLayer il ya bien longtemps.

Création d'un service de services mobiles

Tout est géré depuis le portail Azure et pour l’essentiel, il est assez simple. Son situé à http://manage.windowsazure.com

Tous vos différents services Azure, sites Web, bases de données, etc. sont disponibles dans la partie droite. Pour l'instant, nous nous intéressons uniquement aux services mobiles.

Pour commencer, cliquez sur l'onglet Services mobiles, puis sur le signe + NOUVEAU dans le coin inférieur gauche.

Maintenant, cliquez simplement sur Créer

Le processus est aussi simple que possible. Vous devez sélectionner un préfixe unique (dans Azure et pas uniquement dans vos projets) pour l'URL. La question clé est de savoir quel type de backend vous voulez, JavaScript ou .NET. Personnellement, j'aime bien .NET et c'est ce que je vais faire.

Enfin, vous configurez les paramètres de votre base de données, puis vous avez terminé:

Entrez dans Visual Studio

Retournez maintenant à l'onglet Services mobiles s'il ne vous y conduit pas automatiquement. Maintenant, vous voulez sélectionner un type d'application (ce n'est pas vraiment grave), puis télécharger le fichier de projet.

Le fichier de téléchargement est simplement une solution Visual Studio couplée à une installation NuGet. Extrayez l’archive puis double-cliquez sur le fichier sln pour l’ouvrir dans Visual Studio. Ne vous inquiétez pas, cela fonctionne pleinement avec la version gratuite de Visual Studio, si c'est ce que vous avez.

Ça devrait ressembler a quelque chose comme ca:

Ne vous inquiétez pas, c'est loin d'être aussi compliqué qu'il n'y paraît. Par défaut, le projet est livré avec une valeur de travail TodoItem. Vous pouvez lancer votre service mobile, il fonctionne à 100% localement, ce qui est plutôt cool. Appuyez sur F5 et vous verrez:

Cliquez sur Essayez et vous verrez l'échafaudage créé pour vous:

Plutôt cool. N'oubliez pas que HighScore a été créé par moi, vous ne l'aurez donc pas.

Les services mobiles fonctionnent comme n'importe quel service RESTful typique. Vous faites une demande en utilisant des URL, par exemple http: // localhost: 51289 / tables / TodoItem (votre numéro de port variera!) Renvoie:

Bien que http: // localhost: 51289 / tables / TodoItem / 1 renvoie le TodoItem avec l'identifiant 1, comme suit:

Bien entendu, une description complète de REST dépasse largement le cadre de ce tutoriel. Pour plus de détails, IBM a très bien expliqué les choses, mais il existe des centaines de documents similaires sur le Web.

Enfin un peu de codage freaking

Ajoutons maintenant notre propre service. Commençons par créer un contrôleur. Un contrôleur est essentiellement ce qui mappe une URL à une action. Dans votre solution, cliquez avec le bouton droit de la souris sur le dossier Controllers (Contrôleurs), sélectionnez Ajouter et contrôleur, comme suit.

Sélectionnez Web API 2 Controller – Vide

Puis cliquez sur Ajouter.

Dans la boîte de dialogue, nommez-le. Il s’agira du contrôleur le plus simple que vous ayez jamais vu dans votre vie. Le monde des services Web Hello.

Regardons maintenant du code:

en utilisant Système;
en utilisant Système.Des collections.Générique;
en utilisant Système.Linq;
en utilisant Système.Net;
en utilisant Système.Net.Http;
en utilisant Système.Web.Http;

espace de noms arghService.Contrôleurs

    classe publique HelloController : ApiController
    
        chaîne publique Obtenir()
        
            revenir "Hello World from GET request";
        

        chaîne publique Poster()
        
            revenir "Bonjour tout le monde de la demande POST";
        
    

Maintenant, si vous demandez / api / Hello / via POST (formulaire) ou GET (url), il renverra une chaîne Hello.

Bien sûr, cet exemple n’est pas vraiment utile, essayons de créer un service plus utile, un simple tableau des meilleurs scores. Nous avons d’abord besoin d’un type de données pour stocker nos meilleurs scores. Il suffit de cliquer avec le bouton droit de la souris sur le dossier Modèles et de sélectionner Ajouter-> Classe…

Nommez-le HighScore.cs et cliquez sur Ajouter. Ajoutez le code suivant:

en utilisant Système;
en utilisant Système.Des collections.Générique;
en utilisant Système.Linq;
en utilisant Système.Web;

espace de noms arghService.Des modèles

    classe publique Score élevé
    
        public int Id  obtenir; ensemble; 
        public int But  obtenir; ensemble; 
        chaîne publique Prénom  obtenir; ensemble; 
    

Ajoutez maintenant un nouveau contrôleur, comme avant. Cette fois, appelez-le HighScoreController.cs. Voyons un peu de code:

en utilisant Système;
en utilisant Système.Des collections.Générique;
en utilisant Système.Linq;
en utilisant Système.Net;
en utilisant Système.Net.Http;
en utilisant Système.Web.Http;
en utilisant arghService.Des modèles;
en utilisant Microsoft.Windows Azure.Mobile.Un service.Sécurité;

espace de noms arghService.Contrôleurs


    classe publique HighScoreController : ApiController
    
        statique publique liste<Score élevé> les scores = Nouveau liste<Score élevé> 
            Nouveau Score élevé Id=1,Prénom="Mike",But=42,
            Nouveau Score élevé Id=2,Prénom="Bob",But=43
        ;

        protégé annulation vide Initialiser (Système.Web.Http.Contrôleurs.HttpControllerContext controlContext)
        
            base.Initialize (controllerContext);
        

        Publique IEnumerable<Score élevé> GetAllHighScores ()
        
            revenir les scores;
        [[


        [HttpGet]
        Publique IHttpActionResult GetHighScoreByName (chaîne prénom)
        
            var But = les scores.FirstOrDefault (s) => s.prénom == prénom);
            si (But ! = nul)
                revenir Ok (score);
            revenir Pas trouvé();
        

        Publique IHttpActionResult PutHighScore (Score élevé score élevé)
            les scores.Ajouter (highScore);
            revenir D'accord();
        
    

Exécutez ce code, puis dans la page d'aide générée, vous verrez maintenant:

Cliquez sur le lien PUT api / HighScore et vous pourrez tester votre nouveau service en cliquant sur le lien Try This Out.

Essayez maintenant le lien GET api / HighScore et vous verrez votre nouvelle entrée dans les résultats:

Alors voilà, un service Web REST ultra simple dévoilant une liste des meilleurs scores. Certes, le code est assez terrible. Il n’est pas thread-safe, il n’a pas de persistance à la fin du serveur, il n’ya pas de sécurité, etc. Mais cela montre à quel point les bases sont simples.

En direct

Maintenant que votre service fonctionne localement, il est temps de le déployer sur Azure. Heureusement, il suffit de cliquer avec le bouton droit de la souris sur votre projet et de sélectionner Publier:

Pour configurer votre profil de publication, vous pouvez le télécharger à partir du portail Azure Mobile Services. Dans l'onglet Tableau de bord, sélectionnez Télécharger le profil de publication.

Et maintenant, votre service Azure est en ligne, à condition qu'il n'y ait pas d'erreur. Le mien, par exemple, est à l'adresse http://argh.azure-mobile.net/. Maintenant, voici l’un des aspects les plus énervants de traiter avec Microsoft… peu importe la distance que je cherche, je ne peux pas comprendre l’authentification demandée ici si vous souhaitez accéder à l’échafaudage HTML5 généré. Heureusement, cela ne devrait pas avoir d’importance à ce stade, car vous ne devriez accéder à votre service qu’à partir de code.

Voyons comment appeler notre service à Fiddler.

Voici une demande:

Et voici la réponse:

Woot!

Autres belles choses

L'utilisation d'Azure présente quelques autres avantages. Il existe tout d'abord les options d'authentification standard:

Écrire du code OAuth est franchement un peu pénible, alors il est agréable de voir que Microsoft s'en est occupé à votre place. Donc, si vous voulez que vos utilisateurs s’authentifient auprès de Twitter, Facebook, Google, etc., c’est incroyablement simple.

La base de données. Nous n’avons jamais abordé le côté SQL d’Azure et cela vous simplifie la vie. Fondamentalement, cela fonctionne comme le projet Azure. Vous téléchargez un projet local sur lequel travailler et vous testez, puis vous le réinstallez dans Azure:

Vous disposez d'une chaîne de connexion SQL standard avec laquelle vous pouvez vous connecter. Vous pouvez donc traiter une base de données Azure comme toute autre base de données locale ou distante.

Notifications push. Tout comme ils ont facilité l'authentification à plusieurs services, ils l'ont également fait avec les notifications push:

Windows, Windows Phone, Apple et Google Notification sont tous pris en charge.

Mise à l'échelle automatique…

Bien que cela ne soit pas pris en charge sur le niveau gratuit, vous pouvez facilement configurer votre service pour qu'il soit étendu si nécessaire, ou peut-être plus important, pour ne pas être étendu.

Azure est un service assez impressionnant mais qui nécessite une meilleure documentation. Vous passez beaucoup de temps à essayer de trouver des solutions extrêmement simples (pas avec quel compte vous connecter…), mais plutôt intuitives. La portée de l'API Web (la bibliothèque utilisée pour écrire le code) est énorme et pourrait à nouveau utiliser une meilleure documentation. Normalement, MSDN est un bastion d'informations, mais dans ce cas, les choix sont plutôt minces.

D’après mes expériences, c’est beaucoup plus raffiné que les offres d’Amazon… ou du moins, plus facile. Cela dit, Amazon a construit un écosystème complet sur ses offres, qui vous offre ce vernis. Google… eh bien, c’est tout simplement une merde. En outre, après leur retrait et leur habitude de tuer des produits populaires assez soudainement, je ne rêverais pas d’utiliser leurs services personnellement.

Programmation générale
Design C #


Commentaires

Laisser un commentaire

Votre commentaire sera révisé par les administrateurs si besoin.