Les WebSockets, UDP, et de repères
Websockets HTML5 utilise actuellement une forme de communication TCP. Cependant, en temps réel jeux, TCP, ne suffit pas (et c'est une excellente raison d'utiliser une autre plate-forme, comme les indiens). Comme je l'ai probablement besoin d'UDP pour continuer un projet, j'aimerais savoir si les spécifications pour HTML6 ou ce qui te permettra de soutenir UDP?
Aussi, y at-il des repères fiables pour les WebSockets permettant de comparer les WS protocole relatif à un faible niveau, direct socket protocole?
Vous devez vous connecter pour publier un commentaire.
Sur un réseau local, vous pouvez obtenir de l'aller-retour à temps pour les messages de plus de WebSocket de 200 microsec (à partir du navigateur JS pour serveur WebSocket et retour), ce qui est similaire à raw ICMP ping. Sur l'HOMME, c'est autour de 10ms, WAN (sur ADSL résidentiels de serveur dans le même pays) autour de 30ms, et ainsi de suite jusqu'à environ 120-200ms via 3.5 G. Le point est: WebSocket n'ajoute pratiquement pas de temps de latence à celui que vous aurez de toute façon, basé sur le réseau.
Le fil au niveau de surcharge de WebSocket (par rapport à raw TCP) est comprise entre 2 octets (démasqué charge de la longueur < 126 octets) et 14 octets (masqué de la charge utile de la longueur > 64 ko) par message (les anciens numéros assumer le message n'est pas fragmenté en de multiples WebSocket cadres). Très faible.
Pour une analyse plus détaillée de WebSocket fil au niveau des frais généraux, reportez-vous à cette post de blog - ce qui inclut l'analyse des couches de recouvrement au-delà de WebSocket aussi.
Plus: avec un WebSocket mise en œuvre capable de streaming de traitement, vous pouvez (après la première WebSocket poignée de main), commencer un seul message WebSocket et le cadre dans chaque direction et ensuite l'envoyer jusqu'à 2^63 octets avec pas de frais généraux à tous. Essentiellement, cela rend WebSocket une fantaisie prélude pour TCP. Mise en garde: les intermédiaires peuvent fragmenter le trafic à leur propre décision. Toutefois, si vous exécutez WSS (c'est sûr WS = TLS), pas d'intermédiaires peuvent interférer, et vous y êtes: raw TCP, avec un HTTP compatibles prélude (WS poignée de main).
WebRTC utilise le protocole RTP (= UDP) pour le transport des médias, mais a besoin d'un canal de signalisation en plus (ce qui peut être WebSocket c'est à dire). RTP est optimisé pour la perte tolérant en temps réel médias de transport. "En temps réel à des jeux" signifie souvent de transférer des médias, mais des choses comme la position des joueurs. WebSocket va travailler pour cela.
Remarque: WebRTC transport peut être plus de RTP ou garantis lorsque plus de la SRTP. Voir "RTP" profils des ici.
Je recommande le développement de votre jeu en utilisant les WebSockets sur un réseau câblé local et puis de passer à la WebRTC Canal de Données de l'API, lorsqu'elle est disponible. Comme @oberstet correctement notes, WebSocket latences moyennes sont essentiellement équivalent à raw TCP ou UDP, en particulier sur un réseau local, donc ça devrait être bon pour vous phase de développement. WebRTC Canal de Données de l'API est conçue pour être très similaire à WebSockets (une fois que la connexion est établie), donc ça devrait être assez simple à intégrer une fois, il est largement disponible.
Votre question implique que UDP est probablement ce que vous voulez pour un faible temps de latence du jeu et il est vrai que. Vous savez peut-être déjà puisque vous êtes l'écriture d'un jeu, mais pour ceux qui ne le sont pas, voici une introduction rapide sur TCP vs UDP en temps réel des jeux:
TCP est un ordre, fiable mécanisme de transport et UDP est un best-effort. TCP allons vous livrer toutes les données envoyées et dans l'ordre qu'il a été envoyé. Les paquets UDP sont envoyés dès qu'ils arrivent, peut-être en panne, et peut avoir des lacunes (sur l'encombrement du réseau, les paquets UDP sont supprimés avant que les paquets TCP). TCP sonne comme une grande amélioration, et c'est pour la plupart des types de trafic réseau, mais ces dispositifs ont un coût: un retard ou supprimés paquet provoque tous les paquets d'être retardée (afin de garantir la livraison dans l'ordre).
En temps réel des jeux en général ne peut pas tolérer le type de retards causés par les sockets TCP afin qu'ils utilisent UDP pour la plupart des jeu de trafic et des mécanismes pour résoudre chuté et les données de la commande (par exemple l'ajout de numéros de séquence de données de la charge utile). Ce n'est pas une grosse affaire si vous manquez une mise à jour de position de l'ennemi, le joueur parce que quelques millisecondes plus tard, vous recevrez une autre mise à jour de position (et probablement ne remarquerez même pas). Mais si vous n'obtenez pas la position des mises à jour pour 500ms et puis tout à coup les avoir tous en une fois, que les résultats de la terrible jeu.
Tout ce que dit, sur un réseau câblé local, les paquets ne sont presque jamais retardés ou supprimés et TCP est parfaitement bien dans un développement initial de la cible. Une fois le WebRTC Canal de Données de l'API est disponible, alors vous pourriez envisager de passer à cela. La proposition actuelle est configurable fiabilité basée sur les tentatives ou de minuteries.
Voici quelques références:
Pour faire une longue histoire courte, si vous voulez utiliser le protocole TCP pour les jeux multijoueurs, vous devez utiliser ce que nous appelons diffusion en flux adaptatif techniques. En d'autres termes, vous devez vous assurer que la quantité de données en temps réel envoyé à synchroniser le monde du jeu parmi les clients est régi par la actuellement disponibles de la bande passante et la latence pour chaque client.
Accélération dynamique, de l'agrégation, le delta de la livraison, et d'autres mécanismes de diffusion en flux adaptatif techniques, qui n'ont pas magiquement faire TCP aussi efficace que UDP, mais il est assez utilisable pour plusieurs types de jeux.
J'ai essayé d'expliquer ces techniques dans un article: Optimisation Multijoueur 3D Jeu de Synchronisation Sur le Web (http://blog.lightstreamer.com/2013/10/optimizing-multiplayer-3d-game.html).
J'ai aussi donné une conférence sur ce sujet le mois dernier à HTML5 Développeur Conférence à San Francisco. La vidéo vient d'être mis à disposition sur YouTube: http://www.youtube.com/watch?v=cSEx3mhsoHg
Il n'y a pas d'UDP de soutien pour les Websockets (il faudrait vraiment), mais vous pouvez apparemment utilisation WebRTC est RTCDataChannel API pour l'UDP-comme la communication. Il y a un bon article ici:
http://www.html5rocks.com/en/tutorials/webrtc/datachannels/
RTCDataChannel utilise SCTP qui a configurables de la fiabilité et de commander la livraison. Vous pouvez l'obtenir à agir comme UDP en le racontant à diffuser des messages non ordonnée, et de fixer le nombre maximum de retransmissions à 0.
Je n'ai pas essayé cette même si.
WebSockets ne sera pas. L'un des avantages des WebSockets, c'est qu'il viendra conforter l'existant connexion HTTP. Cela signifie que pour les procurations et les pare-feu les WebSockets ressemble HTTP afin de ne pas se bloquer.
Il est probable arbitraire connexions UDP ne fera jamais partie de la spécification en raison de les problèmes de sécurité. La chose la plus proche de ce que vous êtes après, entrera dans le cadre de WebRTC et il est associé JSEP protocole.
Pas que je suis au courant. Je vais aller sur une branche et de prédire les WebSockets sera plus lent 😉