2013-03-29 116 views
4

我需要一些關於如何最好地使用GWT的RequestFactory處理將實體的服務器端更改傳播到客戶端的建議。GWT RequestFactory並將服務器端更改傳播到客戶端

讓我們假設我們有兩個EntityProxy,一個PersonProxy和一個PersonListProxy(它有一個List的getter)。假設客戶端已經從服務器獲取了PersonList和Person。

如果客戶端正在編輯這些代理之一併發起請求,那麼RequestFactory的機器(如果我已經正確理解了這些原則)將在它檢測到服務器代碼所做的更改時觸發EntityProxyChange事件(以便客戶端可以更新其實體的顯示)。

現在假定服務器正在改變它的實體以外的客戶請求(例如由於另一個客戶端調用服務器),以便這個客戶端會看到另一個版本,如果它再次獲取Person或PersonList。

我的問題是什麼是在RequestFactory框架內告訴客戶端更改(並儘可能多地使用機器)的最佳方式?我們可以假設我有一種方法可以將簡單的消息從服務器發送到客戶端(例如Google App Engine的通道API或服務器發送的事件)。

一個想法可能是,服務器通過此通道發送一條消息,告知具有特定ID的Person或PersonList已更改。處理收到這些消息的客戶端代碼可以使用RequestFactory重新獲取(例如查找)實體。此更改應通過EntityProxyChange事件傳播到客戶端的其他部分。

這是要走的路嗎? (如果客戶端已經擁有當前版本的實體,例如因爲服務器是愚蠢的並且通知了客戶端客戶端自己做出的更改,觸發的重新獲取只會傳輸幾位元數據而不是整個實體再次)

新增:?

思考多一點吧,我不知道如何EntityProxyId的可以爲服務器發送的事件通道來產生。當服務器上的實體發生更改時,服務器只有服務器ID。當然,它可以將它發送給客戶端,但客戶端只知道EntityProxyId的。當然,我可以爲每個EntityProxy添加一個getId()(除了getStableId()),但看起來好像這會爲每個服務器響應添加冗餘數據。

+0

非常有趣的問題!只需要注意一點:「差異」總是從客戶端到服務器的RF(這是客戶端的edit()函數的作用:跟蹤更改以便差異化) –

+0

啊,所以你在說一個'find'總是創建一個新的EntityProxy,並且沒有考慮任何已經存在的具有正確的id和版本的EntityProxy,對嗎?而且我應該小心地回覆我的請求中的小實體,因爲在這裏沒有客戶知識的差異,對嗎? – Marc

+0

瞭解... RequestFactory無法知道服務器端實體的哪些部分發生了變化,因此它將成爲全部或全部變化。 – Marc

回答

2

嗯,我意識到我的帖子並不準確地回答你的問題,但這只是我的經驗。實際上,如何將數據從服務器傳送到客戶端只是一個問題。 幾年前,我面臨一些任務,併爲自己找到了一種讓我的生活更輕鬆的方法。爲了解釋它,我想說明我的理由:

  • 您必須通過向客戶端請求完整的數據傳輸 - 這是直接,自然的請求數據方式;
  • 您不想創建和支持2種不同的全數據傳輸模式:一種是通過從客戶端請求,另一種是從服務器推送;
  • 但是你需要通知客戶端服務器端的一些變化;

所以,現在我使用以下方法建立我的架構:

  1. 建立數據傳輸充滿古典客戶端 - 服務器API - 這樣你就可以加載並刷新自然的方式,即使你的應用程序你推送功能被阻止或破壞。
  2. 定義可能在服務器端更改的關鍵信息,並且應通過推送機制將其傳遞給客戶端。
  3. 創建小推消息結構(S),將提供給客戶端只是一個通知有關變化 - 沒有任何有價值的數據應交付這樣 - 只是其數據被更改的密鑰。
  4. 當客戶端收到這樣的通知時,需要做的只是以已經支持的自然客戶端 - 服務器方式從服務器獲取/刷新數據。
  5. 服務器邏輯不應該通過大量的通知打擾客戶端 - 有時更有效的不提供更改,但只是刷新一切。

希望這會有所幫助。

+0

嗨domax,你如何建立你的推送信息?我正在研究它,我可以找到GAE的Channel API,但我找不到任何將它映射到客戶端的GWT庫(並且我不擅長編寫JS) – manubot

+0

我使用https://github.com/Atmosphere /大氣 另請參閱此處的答案:http://stackoverflow.com/questions/9825849/using-atmosphere-for-gwt-comet – domax

+0

自從我上次訪問那裏以來發生了變化。現在GWT支持在這裏:https://github.com/Atmosphere/atmosphere-extensions/wiki/Atmosphere-GWT-2.0 – domax

相關問題