2014-10-30 37 views
0

我開發一個使用web2py的網關服務器。如何在web2py上保留請求會話?

這樣的:

用戶< --->網關服務器(的web2py)< --->數據服務器

當用戶請求網關服務器,網關服務器將請求到數據服務器。

此數據服務器需要使用同一會話來請求數據。

我在網關服務器代碼:

def test1(): 
    session = requests.Session() 
    resp = session.post(DATA_SERVER_URL1, data=payload1) 

def test2(): 
    session = requests.Session() 
    resp = session.post(DATA_SERVER_URL2, data=payload2) 

我需要從TEST1保持會話()。

當用戶請求test2()時,它需要使用同一會話向數據服務器請求。

它有可能嗎?謝謝!

回答

0

在您的代碼中,您正在爲每個web2py請求創建一個新的requests.Session對象,因此沒有從一個web2py請求到另一個web2py請求的持久性。我相信requests庫的Session對象可能被醃製,所以您應該能夠將它存儲在web2py session(請注意,您不應在您的web2py代碼中將對象命名爲「會話」,因爲已經有一個「會話」對象在全局名稱空間中可用)。

def test1(): 
    session.rs = session.rs or requests.Session() 
    resp = session.rs.post(DATA_SERVER_URL1, data=payload1) 

def test2(): 
    session.rs = session.rs or requests.Session() 
    resp = session.rs.post(DATA_SERVER_URL2, data=payload2) 

在上面的代碼,注意session是web2py的session對象,而不是由requests庫中創建一個對象Session。在每個請求上,上述內容檢查requests.Session對象是否存儲在web2py會話中 - 如果是,則使用該對象,否則它將創建一個新對象(將在來自同一用戶的後續web2py請求中使用)。

+0

謝謝,我會試試這個。 – Tony 2014-10-31 09:54:41