Sont les WebSockets adapté pour multijoueur en temps réel des jeux?

Je suis intéressé par la construction d'une petite multijoueur en temps réel de jeu, à l'aide de HTML5/JavaScript pour le client et probablement de Java pour le logiciel serveur.

J'ai regardé dans les WebSockets un peu, mais il semble que j'ai eu des idées fausses sur ce que les WebSockets sont réellement. J'avais d'abord pensé à des WebSockets comme JavaScript de la façon de gérer les sockets TCP, tout comme ils sont utilisés en Java et d'autres langages, mais il semble qu'il y est un entier de handshaking processus qui doit avoir lieu, et chaque transmission comprend beaucoup HTTP généraux (et dans ce cas, les bénéfices de plus de Ajax ne pas sembler aussi excitante que lors d'un premier coup d'oeil)?

Sur un sujet connexe, y at-il de meilleures solutions pour les WebSockets à cet effet (en temps réel multijoueur jeux en JavaScript)?

  • En fait, dans chaque transmission contient deux octets de surcharge. Le http poignée de main ne se produit que lors de l'ouverture d'un nouveau websocket et vous pouvez garder le websocket ouvert aussi longtemps que le navigateur reste sur cette page.
  • Oui, ils sont. le HTTP poignée de main est fait une fois pour ouvrir le socket. Si la surcharge est importante si vous fermez la prise après un message, et insignifiant si vous gardez le socket ouvert pour toujours.
  • Pourquoi est-ce l'établissement de la liaison si compliqué? À partir de ce que je me souviens, on doit lire dans une poignée de chaînes, dont le dernier est une [aléatoire?] collection de caractères qui doit ensuite être encodées en base64, d'une certaine façon et envoyé au client. J'ai essayé d'écrire ledit serveur-côté de la poignée de main de code moi-même, mais il ne fonctionne pas (l'établissement de la liaison, jamais achevée, de sorte que je n'ai jamais été en mesure d'envoyer et de récupérer mes propres paquets). J'ai atteint le même résultat exact lors de l'utilisation d'un package Java quelqu'un d'autre avait écrit pour faire la même chose.
  • l'établissement de la liaison n'est pas complexe, un serveur websocket est à environ 100 lignes, je vous recommande de socket.io. Quant à savoir pourquoi? sans doute de sécurité.
  • La poignée de main n'est pas compliquée (tools.ietf.org/html/...). L'en-tête de réponse est assez statique (seulement 2 valeurs pour remplir). Il est conçu pour être HTTP-compatible (pour permettre les WebSockets et HTTP/S connexions à arriver sur les mêmes ports). Il ajoute également de la SCRO de sécurité (même Flash sockets faire via l'extérieur de la bande de politique de sécurité de la demande). Le SHA1 accepter de hachage garde un client AJAX de tromper un serveur WebSocket. Remarque il y a une ancienne version de WebSockets qui est très différent, et qui pourrait être à l'origine des problèmes que vous avez vu.
  • Une mise à jour des années plus tard: depuis l'affichage de cette question, j'ai eu du succès le développement d'une variété de jeux qui ont utilisé les websockets, à la fois en temps réel et tour par tour. La méthode la plus simple (et à bien des égards le meilleur) technologie de la pile que j'ai trouvé est d'utiliser Node.js pour le serveur, avec la prise.io à la fois le serveur et le client/navigateur. L'établissement d'une connexion est facile, socket.io poignées de la poignée de main et d'autres exigences, et le processus de développement d'ensemble est très agréable. Je n'ai pas eu de problèmes avec le décalage horaire, mais mon seul temps réel websocket jeux étaient de faible trafic.

InformationsquelleAutor Josh1billion | 2011-11-17