1

サイト ファクトリで http 要求用のプロトコルが作成される方法と時期を理解しようとしています。ファクトリとプロトコルの動作については基本的な理解がありますが、ブラウザーからの単一の要求に対して複数のプロトコルが作成されているため、混乱が生じます。以下は、サンプル コードと出力です。

import sys
from twisted.web.server import Site
from twisted.web.static import File
from twisted.internet import reactor

from twisted.python import log
log.startLogging(sys.stdout)

class GFactory(Site):
    protmade = 0
    def __init__(self,resource):
        Site.__init__(self,resource)

    def buildProtocol(self, addr):
        GFactory.protmade +=1
        print "Building Protocol in factory" + str(GFactory.protmade)
        print addr        
        p = Site.buildProtocol(self, addr)
        return p


resource = File('./temp')
factory = GFactory(resource)
reactor.listenTCP(8888, factory)
reactor.run()

クロムを介してhttp://localhost:8888/の単一のリクエストからログに記録します

2016-05-02 01:38:07+0530 [-] Log opened.
2016-05-02 01:38:07+0530 [-] GFactory starting on 8888
2016-05-02 01:38:07+0530 [-] Starting factory <__main__.GFactory instance at 0x11bac75f0>
2016-05-02 01:38:19+0530 [-] Building Protocol in factory1
2016-05-02 01:38:19+0530 [-] IPv4Address(TCP, '127.0.0.1', 64913)
2016-05-02 01:38:19+0530 [-] Building Protocol in factory2
2016-05-02 01:38:19+0530 [-] IPv4Address(TCP, '127.0.0.1', 64914)
2016-05-02 01:38:19+0530 [-] Building Protocol in factory3
2016-05-02 01:38:19+0530 [-] IPv4Address(TCP, '127.0.0.1', 64915)
2016-05-02 01:38:19+0530 [-] "127.0.0.1" - - [01/May/2016:20:08:19 +0000] "GET / HTTP/1.1" 200 800 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.112 Safari/537.36"

以下は私の質問です

1) 上記のように、3 つの異なるポートからの要求に対して作成された 3 つの異なるプロトコルがあります。これは予想される動作ですか?リクエストごとに 1 つのプロトコルが必要ではないでしょうか?

2) リクエストの有効期限が切れたとき、またはプロトコルが閉じられたときに何らかのアクションを実行する必要がある場合、どのプロトコルを調べる必要がありますか?

4

0 に答える 0