मैं गीवेंट और websockets के साथ खेल रहा हूँ।gevent-websocket तुल्यकालिक क्यों है?
from gevent.pywsgi import WSGIServer
from geventwebsocket.handler import WebSocketHandler
from gevent import sleep
from datetime import datetime
def app(environ, start_response):
ws = environ['wsgi.websocket']
while True:
data = ws.receive()
print('{} got data "{}"'.format(
datetime.now().strftime('%H:%M:%S'), data))
sleep(5)
ws.send(data)
server = WSGIServer(("", 10004), app,
handler_class=WebSocketHandler)
server.serve_forever()
और ग्राहक: यह एक सरल गूंज सर्वर है
<html>
<body>
<button type="button" id="push_data">Push</button>
</body>
<script type="text/javascript" src="http://code.jquery.com/jquery-1.11.3.js"></script>
<script>
var ws = new WebSocket("ws://localhost:10004");
ws.onmessage = function(evt) {
console.log(evt)
};
$('#push_data').click(function(){
console.log('sending data...');
ws.send('sample data');
});
</script>
</html>
gevent
मैं कई अतुल्यकालिक रूप से डेटा की सेवा greenlets के लिए उम्मीद कर रहा था की वजह से
; जो है, अगर मैं कई बार WebSocket के लिए कुछ डेटा धक्का दिया (जल्दी से पुश बटन पर क्लिक), मैं यह सब वापस एक साथ इंतजार कर के 5 सेकंड के बाद करने के लिए उम्मीद कर रहा था।
18:28:07 got data "sample data"
18:28:12 got data "sample data"
18:28:17 got data "sample data"
18:28:22 got data "sample data"
18:28:27 got data "sample data"
कारण है कि यह मेरे डेटा तुल्यकालिक प्राप्त करता है, हर 5 सेकंड रोक:
हालांकि, कोई फर्क नहीं पड़ता कितनी तेजी से मैं पुश बटन पर क्लिक करें, यह क्या मैं कंसोल में मिल रहा है? मैं इसे एसिंक्रोनस सर्वर में कैसे बदलूं? क्योंकि अपने स्वयं के कोड सिंक्रोनस होता है
क्या गीवेंट के साथ बंदर पैचिंग "जादूगर रूप से सिंक्रोनस कोड को एसिंक्रोनस कोड में बदलता है"? – FullStack
केवल तभी यदि आपके पास एकाधिक ग्रीनलेट और कनेक्शन हैं। यदि कोड एक ही ग्रीनलेट से एक कनेक्शन से निपट रहा है, तो गीवेंट का कोरआउट तंत्र मदद नहीं करेगा।दूसरे शब्दों में, जादू केवल तब होता है जब आप इसमें विश्वास करते हैं, और तदनुसार अपना कोड बनाते हैं ;-) –