2011-11-13 98 views
1

我得到了一個使用GWTP(涉及MVP分離,杜松子酒和調度)的項目,現在我需要將服務器上的更改推送給特定客戶端的情況使用GWTP實現服務器推送

我讀過gwt-comet和gwteventservice文檔,看來第一個不能用RPC和第二個Ecnapsulates RPC,爲此我不知道如何使它適合我當前的來自GWTP的命令模式。想法?

回答

3

我一直在使用gwt-comet(http://code.google.com/p/gwt-comet/)。這是一個像RPC一樣工作得很好的本地彗星實現,你也可以發送字符串或你的GWT序列化對象。最好的事情是,你不需要做很多事情就可以實現它。

0

這實際上是一個servlet問題,而不是GWT或GWTP問題。

所以有幾種方法可以做到這一點,最穩定的(在我看來)是有一個長或阻塞的輪詢servlet。這基本上是一個由客戶端輪詢的servlet,如果沒有消息「推送」給客戶端,並且如果過了很多時間(這是爲了解決http超時問題),那麼持續打開連接一段時間。心跳會返回某種類型。無論哪種方式,當servlet請求請求返回時,客戶端只是發出另一個請求。這是我認爲最便攜和穩定的方式,因爲它只使用核心servlet api,不會遇到網絡問題,並且阻止部分允許您在服務器上持續一段時間並且減少總的請求負載,同時允許在有一些可用的情況下將新信息快速返回給客戶端。

實現這一目標的下一個方法是通過WebSockets,一旦你得到它的工作,這是偉大的,我認爲這是未來的方式毫無疑問。我認爲這是一個很好的工作方式,因爲在我看來,一旦網絡應用產生了一定的影響,就會發生模式轉變,所以我們都需要加快速度。基本上,你有一個通過端口80打開的javascript套接字(這是最好的功能之一,因爲你不必打開任何防火牆漏洞),並且可以通過該套接字在兩個方向上進行通信。

彗星也可以工作,但它通常會將您鎖定到一個服務器類型,這可能適合您的應用程序。注意這裏!!!!我只用彗星進行了非常小的測試,當我設置它時它對我來說很脆弱,並且沒有像我設置了的阻塞民意解決方案那樣穩定。

在我看來,現在最新的一個,但這個是非常有限的,由於網絡限制可能單域內部網應用程序,是使用基於小程序的推送。這個設置(可以使用udp或者一個直接的套接字來完成,我在所有的web上只是爲了讓它在概念上更簡單)採用applet,使用它在客戶端上啓動jetty服務器實例,然後讓頁面發佈客戶端的碼頭'端點'到服務器。此時,客戶端可以使用servlet與服務器聯繫,服務器可以通過Jetty服務器上暴露的servlet與客戶端聯繫。這是真正的推動,它是neato,但有網絡惡夢。

因此,我使用長輪詢,留意網絡套接字,因爲它們是我心目中的未來,並且非常喜歡基於小應用程序的版本,儘管由於網絡分辨率限制,它的使用受到限制。

一旦你決定了,從GWTP開始,你只需要有動作或者JSNI橋接方法來連接你的服務器並接收響應。我不會介紹這個,因爲這實際上是一個核心的servlet/http/javascript問題,而不是以GWT或GWTP爲中心的問題。

我希望有幫助!