Heim  >  Artikel  >  Backend-Entwicklung  >  Ausführliche Erklärung und einfache Beispiele der verdrehten Programmierung in Python

Ausführliche Erklärung und einfache Beispiele der verdrehten Programmierung in Python

高洛峰
高洛峰Original
2017-02-03 16:12:421743Durchsuche

Detaillierte Erklärung der verdrehten Programmierung in Python

Vorwort:

Ich bin nicht gut im Schreiben von Socket-Code. Zum einen ist es schwieriger, in C zu schreiben, zum anderen habe ich dafür normalerweise keinen Bedarf. Erst als ich es wirklich verstehen wollte, wurde mir klar, dass ich in diesem Bereich wirklich Verbesserungsbedarf hatte. Kürzlich musste ich aus Projektgründen etwas Python-Code schreiben und habe herausgefunden, wie cool es ist, Sockets unter Python zu entwickeln.

Bei den meisten Sockets müssen Benutzer nur auf drei Ereignisse achten. Dabei handelt es sich um das Erstellen, Löschen sowie Senden und Empfangen von Daten. Die Twisted-Bibliothek in Python kann uns dabei helfen, dieses Ziel zu erreichen, und ihre Verwendung ist nicht problematisch. Der folgende Code stammt von der Twistedmatrix-Website. Ich finde ihn ziemlich gut, deshalb werde ich ihn hier veröffentlichen, um ihn mit Ihnen zu teilen. Wenn Sie einen Test durchführen müssen, verwenden Sie einfach Telnet Localhost 8123. Wenn Sie Signale in Twisted verarbeiten müssen, können Sie zuerst die Signalfunktion registrieren, in der Signalfunktion Reaktor.stop () aufrufen und dann wird Twisted weiterhin stop_factory aufrufen, sodass Sie die verbleibenden Bereinigungsarbeiten fortsetzen können.

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()

Vielen Dank fürs Lesen, ich hoffe, es kann Ihnen helfen, vielen Dank für Ihre Unterstützung dieser Website!

Ausführlichere Erklärungen und einfache Beispiele für Twisted-in-Python-Programmierung finden Sie auf der chinesischen PHP-Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn