我试图了解如何以及何时为Site工厂中的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/到Chrome
的单个请求中记录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)如果我必须在请求到期或协议关闭时采取某些行动,我应该研究哪种协议?