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()

通过 chrome从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 个不同的协议。这是预期的行为吗?每个请求不应该有一个协议吗?

2)如果我必须在请求过期或协议关闭时采取一些措施,我应该研究哪个协议?

4

0 回答 0