我有一个用bottle写的python服务器。当我使用Ajax从网站访问服务器,然后在服务器发送响应之前关闭该网站时,服务器在尝试将响应发送到不再存在的目的地时陷入了困境。发生这种情况时,服务器将在大约10秒钟内对任何请求无响应,然后恢复正常操作。

我该如何预防?如果希望提出请求的网站不存在,我希望Bottle立即停止尝试。

我像这样启动服务器:

bottle.run(host='localhost', port=port_to_listen_to, quiet=True)


服务器公开的唯一网址是:

@bottle.route('/', method='POST')
def main_server_input():
    request_data = bottle.request.forms['request_data']
    request_data = json.loads(request_data)
    try:
        response_data = process_message_from_scenario(request_data)
    except:
        error_message = utilities.get_error_message_details()
        error_message = "Exception during processing of command:\n%s" % (error_message,)
        print(error_message)
        response_data = {
            'success' : False,
            'error_message' : error_message,
        }
    return(json.dumps(response_data))

最佳答案

process_message_from_scenario是长期运行的功能吗? (说10秒?)

如果是这样,您的唯一服务器线程将被捆绑在该函数中,并且在此期间不会为后续请求提供服务。您是否尝试过运行并发服务器,例如gevent?尝试这个:

bottle.run(host='localhost', port=port_to_listen_to, quiet=True, server='gevent')

关于python - 客户端断开连接时bottle.py停顿,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47366798/

10-11 01:02