示例Python Twisted事件驱动网络应用请求计数为何增加2?
在这个链接 http://twistedmatrix.com/trac/ 上提供的基本网页服务器示例代码,似乎每次请求时请求计数器增加了两个,而不是一个。
代码如下:
from twisted.web import server, resource
from twisted.internet import reactor
class HelloResource(resource.Resource):
isLeaf = True
numberRequests = 0
def render_GET(self, request):
self.numberRequests += 1
request.setHeader("content-type", "text/plain")
return "I am request #" + str(self.numberRequests) + "\n"
reactor.listenTCP(8080, server.Site(HelloResource()))
reactor.run()
看这段代码,你应该能连接到网址 http://localhost:8080,然后看到:
I am request #1
接着刷新页面,你会看到:
I am request #2
但是,我看到的是:
I am request #3
当我再次刷新时,我看到:
I am request #5
所以,从计数器来看,服务器似乎对每个请求都调用了“render_GET”这个函数两次。我是在Windows 7上用Python 2.7运行这个的。你觉得这是什么情况,还是说这是正常现象呢?
更新:代码运行得很好,问题出在浏览器上。每次刷新页面时,浏览器会发送两个请求,一个是“/”,另一个是“/favicon.ico”,这就解释了为什么计数器增加了2,因为“render_GET”函数实际上在每次页面刷新时被调用了两次。
2 个回答
2
浏览器可能正在第二次请求 favicon.ico
文件。
你应该让你的服务器在收到请求时打印出请求的位置。这样你就能知道这个请求是否正确。
7
浏览器有时候会表现得很奇怪。如果你尝试打印出完整的请求,你可能会发现它在请求“/”这个地址,还有“favicon.ico”这个文件。