Pythonによるツイストプログラミングの詳細な説明と簡単な例

高洛峰
リリース: 2017-02-03 16:12:42
オリジナル
1749 人が閲覧しました

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 &#39;start&#39;
  
  def stopFactory(self): 
    print &#39;stop&#39;
  
reactor.listenTCP(8123, ChatFactory()) 
reactor.run()
ログイン後にコピー

読んでいただきありがとうございます、皆さんのお役に立てれば幸いです、このサイトをサポートしていただきありがとうございます!

Python プログラミングのツイストのより詳細な説明と簡単な例については、PHP 中国語 Web サイトに注目してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート