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 'start' def stopFactory(self): print 'stop' reactor.listenTCP(8123, ChatFactory()) reactor.run()
읽어주셔서 감사합니다. 도움이 되기를 바랍니다. 이 사이트를 지원해 주셔서 감사합니다!
파이썬 프로그래밍의 Twisted에 대한 자세한 설명과 간단한 예를 보려면 PHP 중국어 웹사이트를 주목하세요!