2010-12-07 28 views
9

Je travaille sur un POC pour l'auto-apprentissage dans lequel je veux garder mon utilisateur connecté en mode LIVE. Par exemple, un jeu dans lequel 4 utilisateurs peuvent jouer à la fois, ici je dois garder cet utilisateur connecté à mon jeu. M n'est pas bon à Socket type de programmation et aime à le faire dans les services. Ce que je sais wana est «Quelle est la meilleure façon de le faire». D'après mon Brain Storming initial, j'ai décidé que j'utiliserai SilverLight (dans le Browser ou Out of Browser) comme Front end [je n'ai aucun problème dans ça].Quel est le meilleur Design/Way pour garder l'utilisateur connecté?

Je m'inquiète plus en arrière. Soit je crée un gestionnaire, soit je fais un service WCF, soit j'utilise un service full duplex et j'utilise un mécanisme de pool pour cela. En tant que pensée au hasard je viens avec une logique de type Timer qui se déclenche à chaque bout de 10 secondes à fin des clients et obtenir le statut comme

  • est-il maintenant son tour de lancer un dé

  • Accueil de nombreux utilisateurs à gauche (en cas si certains d'entre eux à gauche)

  • Quels sont connectés le statut d'utilisateur dans jeu comme il marquer des points/ect et mise à jour
    vue jeu selon ce à sa fin

Veuillez placer vos meilleures réponses ici qui m'aideront à apprendre ceci.

Cordialement et merci à l'avance

EDIT:

À partir de primes que j'ai besoin plus de commentaires.

FH

Répondre

11

Fasih,

Depuis HTTP est sans état, vous ne pouvez pas faire de la communication 2 voies à partir de votre code. Mais il existe une solution de contournement si vous utilisez AJAX. Comme vous l'avez dit, le minuteur est à sens unique. Un autre est appelé COMET ou Reverse AJAX.

Ceci simule la communication bidirectionnelle sans compter sur le temporisateur. Pour ce faire, vous devez effectuer un long appel AJAX au serveur, et l'appel n'est renvoyé que s'il y a un changement de mise à jour. Supposons un scénario de conversation Web simple. 2 utilisateurs effectuent un long appel AJAX vers le serveur, et les deux interrogent le support commun (par exemple DB), si l'utilisateur1 envoie du texte, il sera mis à jour et l'appel AJAX de l'utilisateur 2 récupérera le texte et retournera. Et encore une fois les deux utilisateurs feront un appel de longue durée pour s'écouter les uns les autres.

Comme vous avez déjà décidé d'aller de l'avant avec silverlight, vous pouvez utiliser le canal duplex WCF pour émuler la communication bidirectionnelle. Comme je l'ai expliqué plus tôt, ne pas aller avec la logique de la minuterie. Ce n'est pas instantané si vous interrogez le serveur pendant 10 secondes (tout peut arriver dans un jeu dans les 10 secondes), et cela augmentera la charge du serveur si vous interrogez chaque seconde.

Donc, évitez la logique de la minuterie et utilisez les appels AJAX de longue durée.

Si vous recherchez des options autres que les canaux duplex WCF, HTML5 web sockets et COMET sont d'autres solutions.

consultez ce post pour les navigateurs prenant en charge les socokets Web.

+0

belle réponse. J'aime ça. À partir de là, je peux faire fonctionner mon propre mécanisme d'appel Ajax par Loon. Laisse moi vérifier ça . mettra à jour – Singleton

+0

Il suffit de lire votre réponse maintenant..meilleur que le mien .. droit que le chargement du serveur sera plus si la minuterie est utilisée .. – Mahesh

+0

mon pote, je l'ai dit je viens de lire votre réponse maintenant..si je l'avais lu je ne serais pas J'ai pris la peine de commenter ce que j'ai fait et dit que votre réponse est meilleure que la mienne ... juste pour la courtoisie .. – Mahesh

1

Fondamentalement, il s'agit de pouvoir envoyer des données au client à partir du serveur. Donc je pensais être une architecture d'éditeur d'abonné, vous pouvez créer une file d'attente (dans une table db pour ex) sur le serveur pour chacun des utilisateurs connectés, et avoir un ajax appelant un service web qui va tirer des données de la table .

Chaque message doit être encapsulé en tant que commande pour le client. Vous pouvez donc utiliser différents messages pour chaque opération dont le client est capable. {Commande: affichage, le texte: « bla bla utilisateur a ouvert une session »} une autre commande pourrait ressembler {commande: rolldice, texte: « lancer les dés »}

Laissez-moi savoir ce que vous pensez ...