2013-10-18 103 views
0

我在谷歌應用引擎中有一個聊天應用。我面臨着併發問題。 當聊天從一端開始時,該聊天將向該帳戶中的所有可用代理廣播。當一個傢伙迴應那個傢伙會取得所有權,並在該會話中刪除所有剩下的傢伙。谷歌應用引擎中的併發

在這裏,我同時面臨來自多個代理響應的併發請求的問題。此時,每個請求都會刪除會話中的其餘代理,會話中沒有任何實體。

我認爲這解決了代碼同步。但是多個實例並不適用這種邏輯。由於代碼位於不同的服務器中。

有沒有一種方法可以實現這個同步使用數據存儲/ memcache。

請對此建議。

在此先感謝。

Govind。

回答

1

查看使用CAS與memcache,或者您可以使用數據存儲區中的事務並使用已知鍵計劃控制實體。我不使用的Java所以不能掀起一個例子,我只能找到API文檔的Java程序CAS

https://developers.google.com/appengine/docs/java/javadoc/com/google/appengine/api/memcache/MemcacheService.CasValues

但是在Python的書面記錄仍然解釋是怎麼回事。

https://developers.google.com/appengine/docs/python/memcache/#Python_Using_compare_and_set_in_Python

+0

這是一個不錯的主意 - 這裏有一些信息https://developers.google.com/appengine/docs/java/memcache/#Java_Safely_handling_concurrent_memcache_updates - 唯一要記住的是memcache有合同它被認爲是不穩定的,並且可以在任何時候被刷新。這意味着如果需要重新構建,您需要能夠在數據存儲(或其他位置)中表示相同的邏輯。 – Nick

+0

memcache的臨時性質可能是一個問題,但在這種情況下,我懷疑這是因爲OP正在嘗試解決幾乎同時發生的一組請求以獲得會話。一旦會話分配完畢後,如果有必要,可以在數據存儲中表示。 –

+0

非常感謝。我試着用交易。但有些原因,它不會解決我的問題。我不知道原因。但是隨着Memcache的增加/減少解決了這個問題。這些方法是原子的。這非常簡單和樂觀.https://groups.google.com/forum/#!topic/google-appengine-java/wtESRwKCF5U – Govind