2012-05-09 10 views
5

मैं बहुत की तरह एक jQuery अजाक्स फोन है,:फ्लास्क कैसे बनाएं/अजाक्स HTTP कनेक्शन को जिंदा रखें?

$("#tags").keyup(function(event) { 
     $.ajax({url: "/terms", 
     type: "POST", 
     contentType: "application/json", 
     data: JSON.stringify({"prefix": $("#tags").val() }), 
     dataType: "json", 
     success: function(response) { display_terms(response.terms); }, 
     }); 

मैं बहुत की तरह एक बोतल विधि है:

@app.route("/terms", methods=["POST"]) 
def terms_by_prefix(): 
    req = flask.request.json 
    tlist = terms.find_by_prefix(req["prefix"]) 
    return flask.jsonify({'terms': tlist}) 

tcpdump HTTP संवाद दिखाता है:

POST /terms HTTP/1.1 
Host: 127.0.0.1:5000 
User-Agent: Mozilla/5.0 (X11; Linux i686; rv:12.0) Gecko/20100101 Firefox/12.0 
Accept: application/json, text/javascript, */*; q=0.01 
Accept-Language: en-us,en;q=0.5 
Accept-Encoding: gzip, deflate 
Connection: keep-alive 
Content-Type: application/json; charset=UTF-8 
X-Requested-With: XMLHttpRequest 
Referer: http://127.0.0.1:5000/ 
Content-Length: 27 
Pragma: no-cache 
Cache-Control: no-cache 

{"prefix":"foo"} 

हालांकि, बोतल जीवित रहने के बिना जवाब।

HTTP/1.0 200 OK 
Content-Type: application/json 
Content-Length: 445 
Server: Werkzeug/0.8.3 Python/2.7.2+ 
Date: Wed, 09 May 2012 17:55:04 GMT 

{"terms": [...]} 

क्या वास्तव में यह मामला है कि जीवित रहने को लागू नहीं किया गया है?

उत्तर

6

वेर्कज़ुग का एकीकृत वेब सर्वर पायथन की मानक लाइब्रेरी से बेसएचटीटीपीएस सर्वर पर बनाता है। बेसएचटीटीपीएसवर यदि आप अपना HTTP प्रोटोकॉल संस्करण 1.1 पर सेट करते हैं तो Keep-Alives का समर्थन करना प्रतीत होता है।

वेर्कज़ुग ऐसा नहीं करता है, लेकिन यदि आप उस मशीनरी में हैक करने के लिए तैयार हैं जो फ्लास्क वर्कज़ुग के बेसडब्ल्यूएसजीआईएसवर को तुरंत चालू करने के लिए उपयोग करता है, तो आप इसे स्वयं कर सकते हैं। Flask.run() देखें जो werkzeug.serving.run_simple() पर कॉल करता है। आपको BaseWSGIServer.protocol_version = "HTTP/1.1" पर फोड़े करने के लिए क्या करना है।

मैंने समाधान का परीक्षण नहीं किया है। मुझे लगता है कि आप जानते हैं कि फ्लास्क के वेब सर्वर का उपयोग केवल विकास के लिए किया जाना चाहिए।

+0

वास्तव में, एकीकृत वेबसर्वर केवल विकास उद्देश्यों के लिए है। – ThiefMaster

+1

मैं कल स्पष्ट रूप से थक गया था; मैंने ध्यान नहीं दिया कि मुझे 1.0 उत्तर मिला है। :/मैं एक नज़र रखूंगा और देख सकता हूं कि क्या किया जा सकता है। धन्यवाद। – Bittrance

13

डिफ़ॉल्ट अनुरोध_हैंडर WSGIRequestHandler है।

app.run() से पहले, एक पंक्ति जोड़ें, WSGIRequestHandler.protocol_version = "HTTP/1.1"

from werkzeug.serving import WSGIRequestHandler मत भूलना।

संबंधित मुद्दे