我需要一些關於如何最好地使用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()),但看起來好像這會爲每個服務器響應添加冗餘數據。
非常有趣的問題!只需要注意一點:「差異」總是從客戶端到服務器的RF(這是客戶端的edit()函數的作用:跟蹤更改以便差異化) –
啊,所以你在說一個'find'總是創建一個新的EntityProxy,並且沒有考慮任何已經存在的具有正確的id和版本的EntityProxy,對嗎?而且我應該小心地回覆我的請求中的小實體,因爲在這裏沒有客戶知識的差異,對嗎? – Marc
瞭解... RequestFactory無法知道服務器端實體的哪些部分發生了變化,因此它將成爲全部或全部變化。 – Marc