2014-02-16 27 views
1

如何從客戶端向服務器發送信息? 我有點需要發送一些數據從客戶端到服務器點擊按鈕。 基本上,我有這個頁面有幾個按鈕,我想嘗試發送有關每個按鈕的信息(以及關於客戶端狀態的一些額外信息,但這不完全是必要的),當它被按下時。然後,服務器應該處理該信息,並將處理後的版本發送給所有連接的客戶端。如何將信息從客戶端發送到服務器(Flask - python)

客戶端不刷新至關重要,因爲那樣我們會在javascript遊戲引擎中丟失數據,用戶將不得不重新開始。

ajax會適合嗎?如果是的話,是否有人可以用javascript(客戶端)和Flask(服務器端)函數/代碼包含一個簡短的通用示例?

回答

2

開箱即用,您不能使用持久性請求或帶有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_cacheretrieve_from_cache功能,因爲它取決於你想如何處理這些消息。它們對所有瀏覽器客戶端都是全球的你想有一個消息隊列嗎?

相關問題