開箱即用,您不能使用持久性請求或帶有Flask之類的Websocket。但是,您並不一定需要這樣 - 您可以通過簡單的輪詢機制來使用AJAX。
客戶端:
$('button').click(function() {
var state = $(this).attr('data-state');
$.post('/clients/', { state: state });
});
// Check for messages every 1 second
var checkDelay = 1000;
var lastMessageSeen = new Date().getTime();
setInterval(function() {
$.get('/clients/', function(result) {
if(result.ready and result.timestamp > lastMessageSeen) {
lastMessageSeen = result.timestamp;
console.log('Message received: ' + result.msg);
}
});
}, checkDelay);
服務器端:
from flask import request, jsonify
@app.route('/clients/', methods=['POST'])
def client_broadcast():
state = request.form['state']
# here you can store the message under a key in Memcached, Redis or another in-memory cache server
store_in_cache(state)
return jsonify(stored=True)
@app.route('/clients/', methods=['GET'])
def client_retrieve():
# retrieve messages from cache
msg, timestamp = retrieve_from_cache()
if msg:
return jsonify(ready=True, msg=msg, timestamp=timestamp)
else:
return jsonify(ready=False)
我已經離開了store_in_cache
和retrieve_from_cache
功能,因爲它取決於你想如何處理這些消息。它們對所有瀏覽器客戶端都是全球的你想有一個消息隊列嗎?