【问题标题】:Delay for get request to basehttpserver on Ubuntu server在 Ubuntu 服务器上延迟获取对 basehttpserver 的请求
【发布时间】:2013-10-29 11:33:22
【问题描述】:

我的问题...

  1. 我们有一个本地网络。
  2. 我在带有 Ubuntu Server(12.04.2) 的虚拟机上运行 python basehttpserver。

当我在浏览器链接 192.168.101.3:8081/index.html 中打开时,请求处理了 10 秒,为什么??

示例基础httpserver

class ReqHandler( BaseHTTPServer.BaseHTTPRequestHandler):
    def __init__(self, request, client_address, server):
        BaseHTTPServer.BaseHTTPRequestHandler.__init__( self, request, client_address, server )

    def do_GET(self ):
        self.performReq(self.path.decode('utf-8'))  

    def performReq (self, req ):
        curDir = os.getcwd()
        """ Performing http request """
        if req == '/' :
            self.path = '/index.html'
        fname  = curDir + '/' + self.path[1:]   
        fname = unquote(fname).decode('utf8')
        try:
            self.send_response(200,"Ok!")
            self.send_header('Content', 'text/xml; charset=UTF-8' )
            self.end_headers()
            f = open(fname, 'rb')
            self.wfile.write(f.read())  
            f.close()
            print 'file '+fname+" Ok"   

        except IOError:
            print 'no file '+fname  
            self.send_error(404)

def run(server_class=BaseHTTPServer.HTTPServer):
    server_address = ('', 8081)
    server = server_class(server_address, ReqHandler)
    print('server ok!')
    server.serve_forever()

服务器截图

ubuntu服务器192.168.101.3的IP机器

对不起我的英语。

我的解决方案 - 我在 ReqHandler 中添加了以下方法

def log_message(self,fmt, *args):
    print fmt%args

【问题讨论】:

  • 用神话般的python“profile”库分析你的代码,它会告诉你什么和为什么:docs.python.org/2/library/profile.html
  • 我在 OSX 上的 basehttpserver 遇到了同样的问题。我正在发出一个简单的 GET 请求来从 mongodb 检索单个文档。请求每次延迟大约 10-20 秒。 chrome 控制台在此期间显示状态“等待”。任何其他请求(如 POST 或 PUT)都在毫秒内完成。此外,对外部站点的 GET 请求正常工作,所以我绝对不认为客户端是问题所在。如果您找到解决方案,请分享,我也会这样做。

标签: python ubuntu get virtual-machine basehttpserver


【解决方案1】:

如果您在未连接到 Internet 的本地网络上测试您的 web 应用程序,您可能会遇到这些延迟。这是因为 BaseHTTPServer 默认执行对客户端 IP 的查找(用于记录目的)。检查这个黑客:http://bugs.python.org/issue6085

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-22
    • 1970-01-01
    • 2015-09-30
    • 2015-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多