Próbuję wykonać długie polling z JQuery i Python w ramach Flask Framework.Long Polling w Pythonie z kolbą
Uczyniwszy przed długie odpytywanie w PHP, starałem się go o to w ten sam sposób:
Skrypt/funkcja, która ma while (true) pętli, sprawdzanie zmian okresowo eg.every 0 , 5 sekund w bazie danych i zwraca niektóre dane po wystąpieniu zmiany.
Tak więc w moim ini .py utworzyłem app.route do/poll dla JQuery, aby zadzwonić. JQuery podaje mu pewne informacje o bieżącym stanie klienta, a funkcja poll() porównuje to z tym, co aktualnie znajduje się w bazie danych. Pętla jest zakończona i zwraca informację, gdy zaobserwowana jest zmiana.
Oto kod Python:
@app.route('/poll')
def poll():
client_state = request.args.get("state")
#remove html encoding + whitesapce from client state
html_parser = HTMLParser.HTMLParser()
client_state = html_parser.unescape(client_state)
client_state = "".join(client_state.split())
#poll the database
while True:
time.sleep(0.5)
data = get_data()
json_state = to_json(data)
json_state = "".join(data) #remove whitespace
if json_state != client_state:
return "CHANGE"
Problem polega na tym, że kiedy wyżej kod rozpoczyna odpytywanie, serwer wydaje się być przeładowany i inne Ajax wzywa, i inne wnioski, takie jak załadowanie „Ładowanie” obraz do HTML przy użyciu JQuery nie odpowiada i nie ma limitu czasu.
Na litość Zakończenie za podaję jQuery tutaj:
function poll() {
queryString = "state="+JSON.stringify(currentState);
$.ajax({
url:"/poll",
data: queryString,
timeout: 60000,
success: function(data) {
console.log(data);
if(currentState == null) {
currentState = JSON.parse(data);
}
else {
console.log("A change has occurred");
}
poll();
},
error: function(jqXHR, textStatus, errorThrown) {
console.log(jqXHR.status + "," + textStatus + ", " + errorThrown);
poll();
}
});
}
Czy to potrzeba wielowątkowy czy coś? Czy ktoś może mieć jakiś pomysł, dlaczego doświadczam tego zachowania?
Z góry dziękuję !! :)
Zobacz http://stackoverflow.com/questions/14814201/can-i-serve-multiple-clients-using-just-flask-app-run-as-standalone –