Pythonでひねったプログラミングを詳しく解説
まえがき:
私はソケットコードを書くのが苦手です。 1 つは C で書くのが面倒であるということ、もう 1 つは通常その必要がないということです。それを本当に理解したいと思ったときに初めて、この分野で本当に改善すべき点があることに気づきました。最近、プロジェクトの理由で Python コードを作成する必要があり、Python でソケットを開発することがいかに素晴らしいかを発見しました。
ほとんどのソケットでは、ユーザーは実際に 3 つのイベントに注意を払うだけで済みます。それぞれデータの作成、削除、送受信です。 Python のひねったライブラリはそのような目標を達成するのに役立ち、使用するのは面倒ではありません。次のコードは、Twistedmatrix Web サイトから引用したもので、非常に優れていると思うので、ここに投稿して共有します。テストする必要がある場合は、localhost 8123 に Telnet してください。 Twisted で信号を処理する必要がある場合は、まずシグナル関数を登録し、シグナル関数内でactor.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()
読んでいただきありがとうございます、皆さんのお役に立てれば幸いです、このサイトをサポートしていただきありがとうございます!
Python プログラミングのツイストのより詳細な説明と簡単な例については、PHP 中国語 Web サイトに注目してください。