Explication détaillée et exemples simples de programmation tordue en python

高洛峰
Libérer: 2017-02-03 16:12:42
original
1752 Les gens l'ont consulté

Explication détaillée de la programmation tordue en python

Avant-propos :

Je ne suis pas doué pour écrire du code socket. L’une est qu’il est plus difficile d’écrire en C, et l’autre est que je n’en ai généralement pas besoin. Ce n’est que lorsque j’ai vraiment voulu le comprendre que j’ai réalisé que j’avais vraiment des points à améliorer dans ce domaine. Récemment, j'ai eu besoin d'écrire du code Python pour des raisons de projet, et j'ai découvert à quel point c'était cool de développer des sockets sous python.

Pour la plupart des sockets, les utilisateurs n'ont qu'à prêter attention à trois événements. Il s’agit respectivement de créer, de supprimer, d’envoyer et de recevoir des données. La bibliothèque torsadée en python peut nous aider à atteindre un tel objectif, et elle n'est pas gênante à utiliser. Le code suivant provient du site twistedmatrix. Je pense qu'il est plutôt bien, je vais donc le poster ici pour le partager avec vous. Si vous avez besoin de tester, telnet localhost 8123. Si vous devez traiter des signaux dans twisted, vous pouvez d'abord enregistrer la fonction signal, appeler réacteur.stop() dans la fonction signal, puis twisted continuera à appeler stop_factory, afin que vous puissiez continuer à terminer le travail de nettoyage restant.

from twisted.internet.protocol import Factory 
from twisted.protocols.basic import LineReceiver 
from twisted.internet import reactor 
  
class Chat(LineReceiver): 
  
  def __init__(self, users): 
    self.users = users 
    self.name = None
    self.state = "GETNAME"
  
  def connectionMade(self): 
    self.sendLine("What's your name?") 
  
  def connectionLost(self, reason): 
    if self.name in self.users: 
      del self.users[self.name] 
  
  def lineReceived(self, line): 
    if self.state == "GETNAME": 
      self.handle_GETNAME(line) 
    else: 
      self.handle_CHAT(line) 
  
  def handle_GETNAME(self, name): 
    if name in self.users: 
      self.sendLine("Name taken, please choose another.") 
      return
    self.sendLine("Welcome, %s!" % (name,)) 
    self.name = name 
    self.users[name] = self
    self.state = "CHAT"
  
  def handle_CHAT(self, message): 
    message = "<%s> %s" % (self.name, message) 
    for name, protocol in self.users.iteritems(): 
      if protocol != self: 
        protocol.sendLine(message) 
  
  
class ChatFactory(Factory): 
  
  def __init__(self): 
    self.users = {} # maps user names to Chat instances 
  
  def buildProtocol(self, addr): 
    return Chat(self.users) 
  
  def startFactory(self): 
    print &#39;start&#39;
  
  def stopFactory(self): 
    print &#39;stop&#39;
  
reactor.listenTCP(8123, ChatFactory()) 
reactor.run()
Copier après la connexion

Merci d'avoir lu, j'espère que cela pourra vous aider, merci pour votre soutien à ce site !

Pour des explications plus détaillées et des exemples simples de programmation twisted en python, veuillez faire attention au site Web PHP chinois !

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal