我使用GWTP(涉及MVP分离,Gin和Dispatch)获得了一个项目,现在我正处于需要将服务器上的更改推送到特定客户端的情况
我正在阅读gwt-comet和gwteventservice文档,似乎第一个不适用于RPC和第二个Ecnapsulates RPC,我不知道如何将它放在我目前来自GWTP的命令模式中。想法?
答案 0 :(得分:3)
我一直在使用gwt-comet(http://code.google.com/p/gwt-comet/)。它是一个像RPC一样工作的本机彗星实现,你也可以发送字符串或你的GWT序列化对象。最好的事情是你不需要做很多事情来使它有效。
答案 1 :(得分:0)
我在这里描述的http://code.google.com/p/google-web-toolkit-incubator/wiki/ServerPushFAQ中使用了“GWT中的服务器推送” - 对于一个小项目来说它似乎工作得很好。
答案 2 :(得分:0)
这实际上是一个servlet问题,而不是GWT或GWTP问题。
所以有一些方法可以做到这一点,最稳定的(在我看来)是有一个长的或阻塞的轮询servlet。这基本上是一个由客户端轮询的servlet,如果没有消息要“推送”到客户端,并且如果太多时间过去(这是为了绕过http超时),则保持连接打开一段时间某种心跳会被恢复。无论哪种方式,当servlet请求请求返回时,客户端只是发出另一个请求。这是我最容易和最稳定的方式,因为它只使用核心servlet api,不会遇到网络问题,阻塞部分允许你在服务器上进行轮询“停放”一段时间并减少总请求负载,同时允许在有可用时快速将新信息返回给客户端。
实现这一目标的下一个方法是通过WebSockets,一旦你开始工作就很好,而且我认为这是未来的方式。我认为这是一个很好的工作,因为在我看来,一旦它吸引了大量的人才,这将是Web应用程序的范例转变,所以我们都需要加快速度。基本上,你有一个通过端口80打开的javascript'套接字'(这是最好的功能之一,因为你不必打开任何防火墙漏洞),并且可以通过该套接字在两个方向上进行通信。
Comet也可以工作,但它通常会将您锁定为一种服务器类型,这对您的应用程序来说可能没问题。警告!!!!我只用彗星进行了非常小的测试,当我进行设置时,它对我来说是不稳定的,并且不像我设置的阻塞轮询解决方案那样稳定。
现在是我认为最好的一个,但是由于网络限制可能对单域内联网应用程序来说这个非常有限,就是使用基于applet的推送。这个设置(可以使用udp或直接套接字完成,我做了所有网络只是为了让它在概念上更简单)接受applet,使用它来启动客户端上的jetty服务器实例,并让页面发布客户端到服务器的码头“端点”。此时,客户端可以使用它的servlet联系服务器,服务器可以联系jetty服务器上公开的servlet上的客户端。这是真正的推动,它是neato,但有网络噩梦。
所有上述内容,我使用长轮询,密切关注网络套接字,因为它们是我脑海中的未来,并且非常喜欢基于applet的版本,尽管由于网络分辨率的限制,它在使用上受到严格限制。
一旦确定了这一点,您可以根据需要使用动作或JSNI桥接方法连接到您的服务器并接收响应。我不会讨论这个问题,因为这实际上是一个核心的servlet / http / javascript问题而不是GWT或GWTP中心问题。
我希望有所帮助!