カスタムWebフレームワーク(同期)

クライアントが要求を送信し、サーバーは、靴下を変更します

クライアントがデータを送信し、サーバはCONN変更されます

re.match()は、文字列の先頭にマッチ

インポートソケット
 インポートSELECTの

クラスのHttpRequest(オブジェクト):
     「」「
    ユーザパッケージユーザ要求情報
    」、「」
    DEF  __init__ (セルフ、コンテンツ):
         「」「

        :PARAM内容:ユーザによって送信された要求データ:要求ヘッダと要求ボディ
        」「」
        self.content = コンテンツ

        self.header_bytes = バイト()
        self.body_bytes = バイト()

        self.header_dict = {} 

        self.method = "" 
        self.url = "" 
        自己。プロトコル= 「」

        self.initialize()
        self.initialize_headers()

    DEF (自己)初期化:

        TEMP = self.content.split(B ' \ R \ n \ Rを\ n '、1 もし LEN(TEMP)== 1 
            self.header_bytes + = TEMP
         
            H、B = 一時
            self.header_bytes + = 時間
            self.body_bytes + = Bの

    @property 
    DEF header_str(自己):
         戻り STR(self.header_bytes、エンコーディング= ' UTF-8 '

    DEF initialize_headers(自己):
        ヘッダー = self.header_str.split(' の\ r \ n ' 
        first_line =ヘッダー[0] .split('  ' 場合でlen(first_line)== 3 
            self.method、self.url 、self.protocol =ヘッダー[0] .split('  ' のためのヘッダー:
                KV = line.split(' ' もし LEN(KV)== 2 
                    K、V = KV
                    self.header_dict [K] = Vの

#のクラスフューチャー(オブジェクト):      デフ__init __(自己):          self.result =なし

デフメイン(リクエスト):
     リターン " メイン" 

デフ指数(要求):
     リターン " indexasdfasdfasdf " 


ルーター = [ ' /メイン/ ' 、主)、 ' /インデックス/ ' 、インデックス)
] 

DEF (実行):
    靴下 = socket.socket(はsocket.AF_INET、socket.SOCK_STREAM)
    sock.setsockopt(socket.SOL_SOCKET、socket.SO_REUSEADDR、 1 
    sock.bind((" 127.0.0.1 "、9999 、)) 偽)sock.setblocking 
    sock.listen( 128 

    の入力 = [] 
    inputs.append(靴下を)
    一方TRUE:
        RLIST、wlist、ELIST = select.select(入力、[]、[]、0.05 のために R RLIST:
             もし R == 靴下:
                 "" " 新请求到来""" 
                CONN、ADDR = 靴下。受け入れます()
                conn.setblocking(偽)
                inputs.append(コネチカット州)
            「」「クライアントのデータに「」」
                データ = B 「」
                しばらく真:
                     試してみる
                        チャンク = r.recv(1024 
                        のデータ =データ+ チャンク
                     を除く例外E AS:
                        チャンク = なし
                     IF  ないチャンク:
                         BREAK 
                #のデータ処理:リクエストヘッダとリクエストボディ
                =要求のHttpRequest(データ)
                 1のGet URLリクエストヘッダ
                2中央が外側に一致し、指定された関数の取得
                3は、戻り値取得機能を実行
                ASFD;戻り値r.sendall(b'alskdjalksdjf 4. 「)
                インポート
                フラグに = Falseの
                FUNC = なし
                 ための経路におけるルータ:
                     IF re.match(ルート[0]、request.url):
                        フラグに = Trueの
                        FUNC [1 =ルート]
                         BREAK 
                IF フラグに:
                    結果 = FUNC(リクエスト)
                    r.sendall(バイト(その結果、エンコード = ' UTF-8 ' ))
                 
                    r.sendall(B " 404 " 

                inputs.remove(R)
                r.close()

もし __name__ == ' __main__ " 
    実行()
s6.py

おすすめ

転載: www.cnblogs.com/jintian/p/11445544.html