2010-05-19 4 views
3

J'ai un projet qui est essentiellement un serveur de jeu où les utilisateurs se connectent et envoient des commandes de texte via telnet.Mise en œuvre Twisted Matrix et serveur Telnet

Le code est en C et vraiment vieux et non modulaire et a plusieurs bugs et fonctionnalités manquantes. La fonction principale seule est la moitié du code. Je suis arrivé à la conclusion que la réécriture en Python, avec Twisted, pourrait effectivement aboutir à un achèvement plus rapide, en plus d'autres avantages. Donc, voici les questions: Quels paquets et modules devrais-je utiliser? Je vois un module "telnet" dans le paquet "protocols". Je vois aussi le paquet "cronch" avec "ssh" et un autre module "telnet". Je suis un novice complet en ce qui concerne Python.

Répondre

5

La suggestion de Greg d'essayer de se familiariser avec Python avant d'essayer de prendre Twisted est peut-être raisonnable. Limiter les sources possibles de votre confusion peut vous aider à éviter certains cas très frustrants. D'autre part, je connais beaucoup de gens qui prennent un projet basé sur Twisted comme une première expérience d'apprentissage Python, et réussissent. Donc c'est possible. Et vous devrez faire quelque chose d'abord. Il n'y a aucune garantie que ce que vous choisissez à la place de Twisted sera plus facile. :)

En ce qui concerne les spécificités de telnet, vous devez utiliser twisted.conch.telnet, et non twisted.protocols.telnet. Le premier est plus récent, mieux testé, plus riche en fonctionnalités, et a plusieurs exemples (bien que malheureusement pas beaucoup de documentation au-delà).

The main telnet example affiche les gestionnaires d'événements les plus utiles que vous pouvez définir si vous utilisez twisted.conch.telnet. Malheureusement, cela n'explique pas vraiment ce qu'ils font, ni ne montre comment vous pourriez négocier des options. Si vous connaissez déjà le protocole telnet lui-même (principalement la partie négociation de l'option), cela devrait vous sembler logique. Si vous pensez que "telnet" est juste un moyen de passer des octets lisibles/inscriptibles entre deux ordinateurs, alors vous n'avez probablement jamais couru à travers la négociation d'option auparavant et cela n'a peut-être pas beaucoup de sens. Vous pouvez l'ignorer, ou vérifier the telnet RFC pour en savoir plus (c'est un peu dense, cependant). Pour effectuer la négociation d'options vous-même, vous pouvez au moins jeter un oeil à the API documentation pour l'objet self.transport que vous voyez dans l'exemple ci-dessus (ce n'est pas un transport TCP normal comme vous le trouverez dans une grande partie de Twisted, mais un transport spécial dérivé de telnet qui se trouve au-dessus de TCP, il a donc quelques fonctionnalités supplémentaires).Si vous voulez juste passer des octets, vous pouvez vous concentrer sur la méthode dataReceived et sur self.transport.write. Le premier sera appelé quand vous recevez des octets de votre pair; ce dernier vous pouvez appeler pour envoyer des octets à votre pair.

+0

thnx. Je pense que je vais essayer cette route. –

1

On dirait que vous avez deux tâches distinctes ici:

  • Port le code de C à Python.
  • Réécrire l'ensemble du programme pour utiliser Twisted.

Puisque vous êtes nouveau Python, je serais enclin à faire le premier premier, avant d'essayer de rendre la structure du programme de travail dans Twisted. Si le programme est ancien, il n'y aura probablement pas de problèmes de performance sur un matériel moderne.

La conversion du code C en Python vous donnera la familiarité avec Python dont vous avez besoin pour démarrer sur le port Twisted.

+0

thnx pour la réponse. –