1

我有一个客户端和一个服务器在同一个盒子上运行。客户端能够向urllib.request.Request()外部 URL 发出命令并在大约 0.1 秒内得到响应,速度足够快,作为用户,我没有注意到任何真正的延迟。Request()当向我的本地发出 a时,客户端调用和服务器甚至收到请求http.server.HTTPServer()之间会有 1 秒的延迟。urllib.request.urlopen()do_GET(self)

我看到一些答案表明这是用于记录的 DNS 查找问题,并且覆盖address_string(self)可以解决它,但无论是否修改,我仍然看到完全相同的延迟。

服务器:

import http.server
import time

class MyHTTPHandler(http.server.BaseHTTPRequestHandler): 
    def do_GET(self):
        start = time.time()
        print(start)
        self.send_response(200)
        self.end_headers()

    def address_string(self):
        host, port = self.client_address[:2]
        return host  

server = http.server.HTTPServer(('localhost', 9999), MyHTTPHandler)
try:
    server.serve_forever()
except KeyboardInterrupt:
    print('Stopping server')

客户:

import urllib.request
import urllib.error
import time

def send_data():
    start = time.time()
    r = urllib.request.Request(url='http://localhost:9999')
    print(time.time())
    urllib.request.urlopen(r)
    print(time.time() - start)

while True:
    input('Press enter to send')
    send_data()

有什么想法我想摆脱那一秒钟的延迟吗?我希望这个基本服务器的响应速度至少与 Web 服务器一样快。

4

2 回答 2

2

这可能看起来很奇怪,但请尝试在您的客户端中使用 127.0.0.1 而不是 localhost。

于 2018-05-28T11:43:39.200 回答
0

好的,所以看起来这可能是 Python 版本的问题。

为 Windows 运行 Python 3.5.2 我得到了 1 秒的延迟。为 Ubuntu 运行 Python 3.4.3(技术上是 Ubuntu for Windows)我没有延迟。

于 2017-06-17T14:36:28.960 回答