2016-05-25 84 views
0

有沒有辦法讓多個套接字處理程序訪問相同的變量?下面是一些僞代碼,顯示了我想實現的目標,但是我得到了一個用於shared_variable的UnboundLocalVariable異常。如何在套接字處理程序之間共享變量?

shared_variable = None 

@socketio.on('initialize') 
def initialize_variable(data): 
    shared_variable = data 

@socketio.on('print') 
def print_variable(): 
    print str(shared_variable) 

有什麼想法?提前致謝!

回答

2

如果你想使用一個全局變量,你必須在函數中聲明它,否則每個函數都有自己的局部變量。

shared_variable = None 

@socketio.on('initialize') 
def initialize_variable(data): 
    global shared_variable 
    shared_variable = data 

@socketio.on('print') 
def print_variable(): 
    global shared_variable 
    print str(shared_variable) 

但請注意,如果你這樣做,你所有的客戶端將共享相同的變量。一個更有趣的解決方案是使用用戶會話來存儲你的值,因爲那麼每個客戶端都會有自己的值。

@socketio.on('initialize') 
def initialize_variable(data): 
    session['shared_variable'] = data 

@socketio.on('print') 
def print_variable(): 
    print str(session['shared_variable']) 

重要的是要注意,在如何有一些區別是很重要的session的行爲在Socket.IO事件與普通的HTTP請求的路線。當客戶端連接時,HTTP用戶會話被複制到Socket.IO端,並且從此之後,您在Socket.IO事件中所做的任何更改僅可用於由該客戶端觸發的事件。在HTTP請求中不可見對Socket.IO事件中對會話所做的更改。

+0

謝謝!有什麼最佳實踐,我應該把什麼放入會話變量。遠程服務的通道存根如何? – Marcus

+0

您可以在Socket.IO用戶會話上編寫任何Python對象。 – Miguel