示例Python Twisted事件驱动网络应用请求计数为何增加2?

6 投票
2 回答
807 浏览
提问于 2025-04-17 12:55

在这个链接 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”这个文件。

撰写回答