2011-07-23 125 views
2

我正在构建一个Grails应用程序,它可以通过Web查询多个API。问题是这个查询非常耗时,而且用户点击一个按钮并等待很长时间,而页面没有任何变化,这实在令人讨厌。Grails:服务器到客户端通知

我的应用程序的基本结构是,当用户点击该按钮时,客户端执行与Prototype库Ajax请求到服务器侧。然后,服务器端连接到Last.fm API并检索事件列表。当服务器端完成使用事件填充列表时,它向客户端发送JSON响应,允许客户端为Google地图上的每个事件创建标记。

我想要实现的是,服务器端在检索到一个事件后立即发送JSON响应,而不是等待所有从API检索到的事件发送JSON响应,从而允许客户端填充地图,而其他事件尚未被检索。

任何想法如何实现这一点?我阅读了关于Ajax Push的概念,但我不确定它是否是我需要的。 感谢您的帮助!

回答

1

没有办法打开你的服务器可以连接到客户端上的监听连接。相反,您需要的是连接到保持活动状态并可用于接收事件的服务器。这样,一旦last.fm请求完成,您可以直接返回“操作”请求并通过持久性事件连接通知客户端。

这就是说,我将实现方法是使用AJAX保持活跃。

+0

谢谢,我想我知道你的意思,但我不能找到如何实现这个AJAX任何例子保持活着的原型。你能指出一些例子吗? –

+0

我不知道原型的细节,但可以简单地启动一个“事件监听”请求,并使用一些监视器对象让Grails线程处理请求进入睡眠状态。现在一旦某个事件由其他线程引发,您可以通知该监视器对象并完成“事件监听”请求。然后,您可以发送来自客户端的另一个侦听请求。那有意义吗? – fabiangebert

+0

不是。我在多线程方面的经验很少,所以我很难理解这些概念,不过谢谢。我正在测试另一种基于Ajax推入Atmosphere插件的方法。 –