2009-11-14 5 views

Répondre

5

C'est presque certainement un protocole raisonnable pour commencer. Rappelez-vous la règle cardinale de l'optimisation: ne le faites pas. Travailler avec n'importe quel protocole basé sur TCP va être considérablement plus facile que de travailler avec n'importe quel protocole basé sur UDP. Ceci est d'abord beaucoup plus important pour la réussite de votre projet que si cela prend 30 millisecondes ou 45 millisecondes pour envoyer un message entre votre client et votre serveur. Finalement, quand vous êtes arrivé au point où il est clair que votre projet pourrait réussir et vous avez vraiment besoin de compenser ces 15 (ou plusieurs) millisecondes, vous pouvez revoir la couche réseau et examiner si le goulot d'étranglement de la performance (soit la latence) ou une autre métrique) est due à votre choix de protocole. Si oui, c'est le moment de passer du temps à évaluer diverses alternatives. C'est seulement à ce moment-là que l'effort de sélection du protocole idéal pourrait être payant (puisque vous êtes plus proche d'un projet achevé) et que vous aurez alors une meilleure compréhension du problème et que vous auriez dû définir votre Exigences très spécifiquement, deux choses plus qui rendra la tâche de sélectionner le protocole approprié (que ce soit TCP ou UDP) beaucoup plus facile et plus susceptible d'être correct.

3

Pour votre première question, oui, les performances de PB peuvent être parfaitement adaptées à un jeu en temps réel. Plusieurs jeux ont été écrits en utilisant PB. Par exemple, MV3D utilise Twisted et Python-OGRE pour présenter une simulation physique partagée.

Pour votre deuxième question, PB s'exécute sur un transport orienté flux. Il pourrait fonctionner sur "UDP fiable" en utilisant quelque chose comme le module PTCP qui vient avec vertex.

Cependant, vous devez être conscient que "UDP fiable" sera généralement beaucoup moins performant que l'ancien TCP. Les routeurs tout le long d'Internet comprennent TCP et peuvent l'optimiser en utilisant cette compréhension. Si vous implémentez la fiabilité sur le dessus de l'UDP, par nécessité, vous aurez besoin de mettre en œuvre quelque chose fonctionnellement équivalent à TCP, et plusieurs facteurs vous pénaliser:

  • votre implémentation de la fiabilité doit fonctionner dans votre application, pas dans le noyau du système d'exploitation.
  • votre implémentation de TCP doit faire tous les mêmes choses que TCP, sinon vous devrez faire face à des bogues mystérieux dans des environnements réseau imprévus.
  • routeurs le long du chemin ne peut pas optimiser pour votre couche de fiabilité personnalisée

Que peut faire UDP « plus vite » dans certaines circonstances est jeter une grande partie du travail que TCP ne, en étant peu fiables. Si votre couche de messagerie n'est pas fiable, alors vous devez savoir que les données qu'elle délivre peuvent être arbitrairement rejetées.

Habituellement, les données qui conviennent à la transmission sur UDP dans un jeu sont des données de mouvement. Lorsque votre position change, vous pouvez envoyer un paquet UDP et il peut être défaussé car le jeu se soucie uniquement de votre position la plus récente - une fois qu'une mise à jour a été reçue, toutes les positions précédentes ne sont pas pertinentes. Tant de jeux envoient des données de mouvement sur un canal UDP (non fiable), puis tous les messages de contrôle sur un canal TCP plus fiable.Cependant, la réponse de Jean-Paul à propos de l'optimisation est une bonne indication du moment où vous pourriez envisager de mettre en œuvre cette optimisation.

Questions connexes