>백엔드 개발 >파이썬 튜토리얼 >Python의 꼬인 프로그래밍에 대한 자세한 설명과 간단한 예

Python의 꼬인 프로그래밍에 대한 자세한 설명과 간단한 예

高洛峰
高洛峰원래의
2017-02-03 16:12:421755검색

Python의 Twisted 프로그래밍에 대한 자세한 설명

머리말:

저는 소켓 코드를 잘 작성하지 못합니다. 하나는 C로 작성하는 것이 더 번거롭다는 것이고, 다른 하나는 보통은 그럴 필요가 없다는 것입니다. 제가 정말로 그것을 이해하고 싶었을 때에만 이 분야에서 개선할 부분이 있다는 것을 깨달았습니다. 최근에 저는 프로젝트상의 이유로 Python 코드를 작성해야 했고, Python에서 소켓을 개발하는 것이 얼마나 멋진지 깨달았습니다.

대부분의 소켓에서 사용자는 세 가지 이벤트에만 주의하면 됩니다. 이는 각각 데이터 생성, 삭제, 전송 및 수신입니다. Python의 Twisted 라이브러리는 이러한 목표를 달성하는 데 도움이 될 수 있으며 사용하기가 어렵지 않습니다. 다음 코드는 Twistedmatrix 웹사이트에서 가져온 것입니다. 꽤 괜찮은 것 같아서 여기에 게시하여 여러분과 공유하겠습니다. 테스트가 필요한 경우 Telnet localhost 8123을 사용하면 됩니다. Twisted에서 신호를 처리해야 하는 경우 먼저 신호 함수를 등록하고 신호 함수에서 Reactor.stop()을 호출한 다음 Twisted에서 stop_factory를 계속 호출하므로 나머지 정리 작업을 계속 완료할 수 있습니다.

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

읽어주셔서 감사합니다. 도움이 되기를 바랍니다. 이 사이트를 지원해 주셔서 감사합니다!

파이썬 프로그래밍의 Twisted에 대한 자세한 설명과 간단한 예를 보려면 PHP 중국어 웹사이트를 주목하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.