2017-11-18 1 views
2

병으로 작성된 파이썬 서버가 있습니다. Ajax를 사용하여 웹 사이트에서 서버에 액세스 한 다음 서버가 응답을 보내기 전에 웹 사이트를 닫으면 서버가 더 이상 존재하지 않는 대상으로 응답을 보내려고 시도합니다. 이 경우 서버는 정상 작동을 재개하기 전에 약 10 초 동안 모든 요청에 ​​대해 응답하지 않게됩니다.클라이언트가 연결을 끊을 때 bottle.py가 멈 춥니 다

어떻게 방지 할 수 있습니까? 요청을 한 웹 사이트가 더 이상 존재하지 않으면 병을 즉시 사용 중지하겠습니다.

@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)) 

답변

2

process_message_from_scenario 장기 실행 기능입니다 :

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

서버에 의해 노출 된 유일한 URL이 있습니다 :

는이 같은 서버가 시작? (말하기, 10 초)

그렇다면 하나의 전용 서버 스레드가 해당 기능에 묶여 있으며 그 시간 동안 이후의 요청은 처리되지 않습니다. gevent와 같은 동시 서버를 실행 해 보셨습니까? 시도해보십시오 :

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

gevent fixed를 사용하십시오. –

관련 문제