2010-07-27 81 views
0

我想建立一個django服務,許多客戶端將發送數據。每個客戶端都會代表一個經過身份驗證的用戶,他們可能會連接到互聯網或不連接到互聯網,因此客戶端會聚合數據並在連接可用時發送它們。數據也應該保存在本地,以便在不碰到服務器的情況下快速訪問數據。發送數據到Django站點

數據的性質很簡單。它與遊戲成就有關,因此每個用戶都會獲得他們已經取得的成就。因此,沒有一致性問題,因爲每個用戶都將發送自己的成就統計信息,並且沒有用戶會編輯其他人的數據。

我正在嘗試爲此找到最合適的介質。我的第一個想法是django服務器將處理的POST HTTP請求。一個python客戶端將通過執行這些請求來登錄和「發送」數據。任何人都可以提出更好的替代方案,或給出我爲什麼這個設置適合或不適合的理由

我也想知道你會建議什麼格式/方式從客戶端獲取數據。我在想json或yaml編輯2:這個問題已經在S.Lott的推薦後進行了修改。

回答

2

很多人喜歡這個Piston

我們推出了自己的產品(活塞尚未發佈)。是的,您可以在Django中使用JSON有效負載輕鬆處理RESTful POST請求。然而......一般來說,處理REST是一件痛苦的事情,因爲根據方法(GET,POST,PUT或DELETE)調度到視圖函數不是Django的一部分。您可以推出自己的基於方法的調度程序,但從長遠來看,您會對自己的解決方案感到不滿。

活塞不是「額外的開銷」。你所描述的不是 - 實際上 - 簡單。活塞是這個的適當開銷。 「


」客戶端將這些調用聚合在本地數據庫中,然後將它們與服務器同步。「太複雜了。

如果這些事件以不可思議的巨大速率(每秒100次)發生,那麼您將需要一個通過mod_wsgi運行多個Django後端的多進程Apache前端。

但是讓客戶端與中央數據庫同步將會過於複雜。關於客戶收集一些數據和崩潰或客戶端同步兩次的開放性問題太多,因爲有人在應用程序不應該運行兩次的情況下運行應用程序。 「數據庫同步」的問題太多了。躲開它。

+0

活塞看起來不錯,但我真的需要這些簡單操作的額外開銷嗎? – FrontierPsycho 2010-07-28 07:40:54

+0

這非常有趣,謝謝。然而,這個應用程序,我想象它,也必須脫機工作,所以聚合是必要的。 另外,由於應用程序的性質,沒有兩個客戶端會希望在同一行上寫入,因此可能不存在任何一致性問題。每個用戶都有一個帳戶,他們的客戶端將寫入僅與他們有關的數據(用他們自己的user_id)。 我覺得我的英語已經讓我失望了一點,但我希望我明確自己。 但是,我一定會考慮活塞。謝謝。 – FrontierPsycho 2010-07-29 07:06:04

+0

@ FrontierPsycho:請用所有這些新事實更新你的問題。你從根本上改變了你所要求的性質。 – 2010-07-29 11:25:35

0

我相信xmlrpc將是一個有效的解決方案。這裏是一個例子:http://code.djangoproject.com/wiki/XML-RPC我們在工作中使用它,工作得很好,因爲我們的服務器還提供了一些服務。

+0

嗯。我主要需要在服務器和客戶端之間傳遞數據,而不是進行遠程過程調用。這看起來有點像使用扳手作爲錘子。我可能錯了。 – FrontierPsycho 2010-07-28 07:42:13

+0

爲什麼你想用django呢?你爲什麼不直接用Python編寫你自己的服務器? – gruszczy 2010-07-28 12:13:25

+0

我有一個數據庫,也希望有一個網站向全世界公開數據。這將是一種社交網站。 – FrontierPsycho 2010-07-29 06:56:51

0

用角度試試Django Rest框架。

您可以將Django/Django Rest作爲後端。

對於前端,您可以使用nodejs或python simplehttp服務器或grunt或gulp運行的angular或react.js。

因此,前端將與django服務器通信以獲取數據。爲了登錄,你可以使用auth-token和角度cookie。

這也將減少後端服務器的負載,因爲後端不必提供HTML /模板