与Grails长期民意调查

时间:2013-10-21 05:31:49

标签: grails groovy long-polling

我正在开发一个聊天网络应用程序,所以我当然需要使用某种“推送”方法发布事件,如果事件发生在后台。我决定暂时坚持使用长轮询,因为我对Web开发有点新意,而且我没有太多时间学习将新信息推向视图的好方法,而且似乎工作得很好。那么,现在我的问题:在服务器端我有一个方法,我有一个永无止境的循环,没有睡眠,所以如果有任何事情(例如用户得到一个新的消息)我可以发布到实时查看。有一些用户,它工作正常,但如果很多用户开始使用它,服务器会发生什么?它会崩溃吗?

代码示例:

def update() {
 boolean stayInWhile = true
 while(stayInWhile) {
  //check for updates
  if(/*update available*/) {
   stayInWhile = false
   //set up a response
  }
 }
 //return response
}

1 个答案:

答案 0 :(得分:1)

正如您所怀疑的那样,如果很多人同时使用您的应用程序,我认为您正在使用的方法最终会使请求线程的容器挨饿。

更好的方法是在客户端浏览器上运行javascript计时器,每隔几秒钟向您的update()方法提交一个ajax请求。这样,您的请求线程将在每次“检查”后返回到池中。看看javascript setTimeout method。还有一个couple of stackoverflow有关使用setTimeout更新进度条的问题。

或者,您可以使用优秀的Grails Atmosphere plugin设置ajax'push'(来自服务器 - >客户端)。